helium_7.0.x-r16015 helium-7.0.x
authorwbernard
Wed, 23 Jun 2010 16:36:23 +0300
branchhelium-7.0.x
changeset 593 4367a1b2db65
parent 592 3215c239276a
child 594 904749c9fc4c
helium_7.0.x-r16015
buildframework/helium/config/metadata_regex.csv
buildframework/helium/config/stages_config_default.ant.xml
buildframework/helium/config/version.txt
buildframework/helium/external/helium-antlib/bin/helium-core.jar
buildframework/helium/external/helium-antlib/bin/helium-diamonds.jar
buildframework/helium/external/helium-antlib/bin/helium-logging.jar
buildframework/helium/external/helium-antlib/bin/helium-metadata.jar
buildframework/helium/external/helium-antlib/bin/helium-quality.jar
buildframework/helium/external/helium-antlib/bin/helium-sbs.jar
buildframework/helium/external/helium-antlib/bin/helium-scm.jar
buildframework/helium/external/helium-antlib/bin/helium-signaling.jar
buildframework/helium/external/helium-antlib/bin/helium-sysdef.jar
buildframework/helium/external/helium-antlib/core/src/com/nokia/helium/core/plexus/FileStreamConsumer.java
buildframework/helium/external/helium-antlib/core/tests/src/com/nokia/helium/core/plexus/tests/TestFileStreamConsumer.java
buildframework/helium/external/helium-antlib/diamonds/src/com/nokia/helium/diamonds/DiamondsListenerImpl.java
buildframework/helium/external/helium-antlib/logging/src/com/nokia/helium/logger/ant/listener/AntLogRecorderEntry.java
buildframework/helium/external/helium-antlib/logging/src/com/nokia/helium/logger/ant/taskdefs/LogRecorder.java
buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataLogCondition.java
buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataRecord.java
buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/types/LogMetaDataInput.java
buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/types/SBSLogMetaDataInput.java
buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/types/XMLLogMetaDataInput.java
buildframework/helium/external/helium-antlib/metadata/tests/functionality/test_regex.ant.xml
buildframework/helium/external/helium-antlib/sbs/src/com/nokia/helium/sbs/ant/taskdefs/SBSTask.java
buildframework/helium/external/helium-antlib/sbs/src/com/nokia/helium/sbs/ant/types/SBSInput.java
buildframework/helium/external/helium-antlib/sbs/src/com/nokia/helium/sbs/ant/types/SBSMakeOptions.java
buildframework/helium/helium.ant.xml
buildframework/helium/tests/data/distribution.policy.extended_for_sf.id_status.csv
buildframework/helium/tests/data/distribution.policy.id_status.csv
buildframework/helium/tools/common/python/lib/ats3/ats4_template.xml
buildframework/helium/tools/common/python/lib/ats3/testconfigurator.py
buildframework/helium/tools/common/python/lib/build/model.py
buildframework/helium/tools/common/python/lib/ccm/__init__.py
buildframework/helium/tools/common/python/lib/cpythontest/test_ats3.py
buildframework/helium/tools/common/python/lib/cpythontest/test_ats4.py
buildframework/helium/tools/common/python/lib/ido.py
buildframework/helium/tools/common/python/lib/idoprep.py
buildframework/helium/tools/common/python/scripts/sbsscanlogmetadata.py
buildframework/helium/tools/common/templates/ido/ido-robot-zip.ant.xml.ftl
buildframework/helium/tools/common/templates/log/scan2.html.ftl
buildframework/helium/tools/common/templates/log/scan2_text.html.ftl
buildframework/helium/tools/common/test/test_common.ant.xml
buildframework/helium/tools/compile/compile.ant.xml
buildframework/helium/tools/compile/compile.antlib.xml
buildframework/helium/tools/compile/qt/templates/run-qmake.ant.xml.ftl
buildframework/helium/tools/compile/qt/templates/run-qmake.mk.ftl
buildframework/helium/tools/compile/sbs/sbs.ant.xml
buildframework/helium/tools/localisation/localisation-32.ant.xml
buildframework/helium/tools/preparation/bom/bom.ant.xml
buildframework/helium/tools/preparation/ci.ant.xml
buildframework/helium/tools/preparation/synergy/ccmgetinput.ant.xml
buildframework/helium/tools/preparation/test/test_synergy.ant.xml
buildframework/helium/tools/publish/synergy.ant.xml
buildframework/helium/tools/rombuild/imaker.ant.xml
buildframework/helium/tools/rombuild/rombuild.ant.xml
buildframework/helium/tools/testing/ats/ats.ant.xml
--- a/buildframework/helium/config/metadata_regex.csv	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/config/metadata_regex.csv	Wed Jun 23 16:36:23 2010 +0300
@@ -1,55 +1,66 @@
 priority,regex,description
 CRITICAL,.*Error:.*mingw_make\.exe.*,
-ERROR,.*\): Missing file:.*, 
-ERROR,^(?:(?:\s*\d+\)\s*)|(?:\s*\*\*\*\s*))ERROR:.*,
-ERROR,.*Error:\s+.*,
+ERROR,.*\: cannot create regular file.*,
+ERROR,.*\): Missing file:.*,
+ERROR,(?:(?:\s*\d+\)\s*)|(?:\s*\*\*\*\s*))ERROR:.*,
 ERROR,.*is not recognized as an internal or external command.*,
-ERROR,^MISSING:.*,
+ERROR,MISSING:.*,
 ERROR,.*FLEXlm error:.*,
-ERROR,.*(ABLD|BLDMAKE) ERROR:.*,
+ERROR,.*(ABLD|BLDMAKE)\s*ERROR:.*,
 ERROR,.*FATAL ERROR\(S\):.*,
 ERROR,.*fatal error C1001: INTERNAL COMPILER ERROR.*,
 ERROR,.*fatal error U1077.*,
-ERROR,.*warning U4010,
-ERROR,^make(?:\[\d+\])?\: \*\*\*.*,
-ERROR,^make(?:\[\d+\])?:\s+.*\s+not\s+remade.*,
-ERROR,error: ((Internal fault):)$,
-ERROR,.*No such file or directory$,
+ERROR,^fatal error.*,
+ERROR,.*warning U4010.*,
+ERROR,make(?:\.exe)?\s*(?:\[\d+\])\s*?\:\s*\*\*\*.*,
+ERROR,make(?:\.exe)(?:\[\d+\])?\:.*\s+not\s+remade.*,
+ERROR,make(?:\.exe)\s*:\s*\*\*\*.*\s*[Nn]o rule.*,
+ERROR,"\""(?:.*)\"" , line (\d+): (Error: +(.\d+.*?):.*)",
+ERROR,error: ((Internal fault):.*)$,
+ERROR,.*Exception: STATUS_ACCESS_VIOLATION.*,
+ERROR,.*target .* given more than once in the same rule.*,
+ERROR,ERROR:.*,
+ERROR,Error:.*,
+ERROR,ERROR\t.*,
+ERROR,^.*\s*elf2e32\s*:\s*Error\s*:\s*,
+ERROR,.*[Nn]o such file or directory\s*.*,
 ERROR,Exception: [A-Z0-9_]+.*,
 ERROR,.*target .* given more than once in the same rule.*,
-ERROR,^ERROR:.*,
-ERROR,^ERROR EC\d+:.*,
+ERROR,ERROR EC\d+:.*,
 ERROR,Errors caused tool to abort..*,
-ERROR,.*no rule to make.*,
-ERROR,^ERROR\t.*,
+ERROR,ERROR\t.*,
 ERROR,.*Traceback \(most recent call last\).*,
-ERROR,^Application encountered an unexpected error\.\s*Stopping\.\s*,
-ERROR,^Unable to write dump file .+,
-ERROR,^Unable to connect to CM: .*,
-ERROR,^.*: Incorrect slash in .*,
-ERROR,^.*: Incorrect case for epoc32 tree in .*,
-ERROR,^.*: Incorrect case versus exclusion list in .*,
+ERROR,Application encountered an unexpected error\.\s*Stopping\.\s*,
+ERROR,Unable to write dump file .+,
+ERROR,Unable to connect to CM: .*,
+ERROR,.*: Incorrect slash in .*,
+ERROR,.*: Incorrect case for epoc32 tree in .*,
+ERROR,.*: Incorrect case versus exclusion list in .*,
 ERROR,The system cannot find the path specified.*,
 CRITICAL,.*[Ww]arning:?\s+(#111-D|#1166-D|#117-D|#128-D|#1293-D|#1441-D|#170-D|#174-D|#175-D|#185-D|#186-D|#223-D|#231-D|#257-D|#284-D|#368-D|#414-D|#430-D|#47-D|#514-D|#546-D|#68-D|#69-D|#830-D|#940-D|#836-D|A1495E|L6318W|C2874W|C4127|C4355|C4530|C4702|C4786|LNK4049).*,
-WARNING,^(\d+\))?\s.*WARNING:.*,
-WARNING,^MAKEDEF WARNING:.*,
-WARNING,.*\\\\(?)\(\d+\)\s:\sWarning:\s\(\d+\),
-WARNING,^(BLDMAKE |MAKEDEF )?WARNING:.*,
+WARNING,.*\\\\(?)\(\d+\)\s:\sWarning:\s\(\d+\).*,
+WARNING,(\d+\))?\s.*WARNING:.*,
+WARNING,(BLDMAKE |MAKEDEF )?WARNING:.*,
 WARNING,.*\(\d+\) : warning C.*,
 WARNING,.*\d+: warning:.*,
 WARNING,.*Usage Warning:.*,
 WARNING,.*mwld.exe:.*,
-WARNING,^Command line warning.*,
+WARNING,Command line warning.*,
 WARNING,.*ERROR: bad relocation:.*,
-WARNING,^(\d+) warning.*,
+WARNING,(\d+) warning.*,
 WARNING,.*EventType:\s+Error\s+Source:\s+SweepNT.*,
-WARNING,^WARN\t.*,
+WARNING,WARN\t.*,
 WARNING,.*LINK : warning.*,
+WARNING,.*\s*elf2e32\s*:\s*Warning\s*:\s*,
+WARNING,Warning:.*,
+REMARK,"\"".*\""\, line \d+: Warning: +(.\d+.*?):.*",
 REMARK,.*Command line warning D4025 : .*,
-REMARK,^REMARK: .*,
-REMARK,^EventType:\s+Error\s+Source:\s+GNU\s+Make.*,
-REMARK,".*:\d+: warning: cannot find matching deallocation function""r""((:\d+)*: note: ).*",
-INFO,^INFO:.*,
-ERROR,"\""(.*)\"" , line (\d+): (Error: +(.\d+.*?):.*)$",
-WARNING,"line \d+: Warning:', r':\s+warning\s+\w+:.*",
-WARNING,"\""(.*)\""\, line (\d+): (Warning: +(?!A1495E)(.\d+.*?):.*)$",
\ No newline at end of file
+REMARK,REMARK: .*,
+REMARK,EventType:\s+Error\s+Source:\s+GNU\s+Make.*,
+REMARK,".*:\d+: warning: cannot find matching deallocation function.*",
+REMARK,(:\d+)*: note: .*,
+INFO,INFO:.*,
+WARNING,"line \d+: Warning:'\, r':\s+warning\s+\w+:.*",
+WARNING,"\""(.*)\""\, line (\d+): (Warning: +(?!A1495E)(.\d+.*?):.*)",
+WARNING,Warning\s*:\s*.*,
+ERROR,.*Error\s*:\s*.*,
\ No newline at end of file
--- a/buildframework/helium/config/stages_config_default.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/config/stages_config_default.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -41,7 +41,7 @@
     
     
     <!-- Stage record configuration -->
-    <hlm:stagerecord id="stage.default" defaultoutput="${build.log}" loglevel="${ant.loglevel}" append="false"/>
+    <hlm:stagerecord id="stage.default" defaultoutput="${build.log}" loglevel="${ant.loglevel}" append="true"/>
        
     <hlm:stagerecord id="stage.preparation" stagerefid="preparation" output="${build.log.dir}/${build.id}_prep.ant.log" loglevel="info" append="true"/>
     
--- a/buildframework/helium/config/version.txt	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/config/version.txt	Wed Jun 23 16:36:23 2010 +0300
@@ -1,4 +1,4 @@
 #Helium version - DO NOT EDIT
-#Fri Dec 18 15:07:03 EET 2009
+#Wed Dec 23 16:22:42 EET 2009
 last.major.helium.version=6.0
 helium.version=7.0
Binary file buildframework/helium/external/helium-antlib/bin/helium-core.jar has changed
Binary file buildframework/helium/external/helium-antlib/bin/helium-diamonds.jar has changed
Binary file buildframework/helium/external/helium-antlib/bin/helium-logging.jar has changed
Binary file buildframework/helium/external/helium-antlib/bin/helium-metadata.jar has changed
Binary file buildframework/helium/external/helium-antlib/bin/helium-quality.jar has changed
Binary file buildframework/helium/external/helium-antlib/bin/helium-sbs.jar has changed
Binary file buildframework/helium/external/helium-antlib/bin/helium-scm.jar has changed
Binary file buildframework/helium/external/helium-antlib/bin/helium-signaling.jar has changed
Binary file buildframework/helium/external/helium-antlib/bin/helium-sysdef.jar has changed
--- a/buildframework/helium/external/helium-antlib/core/src/com/nokia/helium/core/plexus/FileStreamConsumer.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/core/src/com/nokia/helium/core/plexus/FileStreamConsumer.java	Wed Jun 23 16:36:23 2010 +0300
@@ -21,7 +21,7 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
-import java.io.Writer;
+import java.io.BufferedWriter;
 
 import org.apache.log4j.Logger;
 import org.codehaus.plexus.util.cli.StreamConsumer;
@@ -32,7 +32,7 @@
  */
 public class FileStreamConsumer implements StreamConsumer {
     private Logger log = Logger.getLogger(getClass());
-    private Writer writer;
+    private BufferedWriter writer;
     
     /**
      * Create a FileStreamConsumer which will record content to 
@@ -41,7 +41,7 @@
      * @throws FileNotFoundException if an error occur while opening the file.
      */
     public FileStreamConsumer(File output) throws FileNotFoundException {
-        writer = new OutputStreamWriter(new FileOutputStream(output));
+        writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output)));
     }
     
     /**
@@ -50,7 +50,8 @@
     @Override
     public synchronized void consumeLine(String line) {
         try {
-            writer.append(line + "\n");
+            writer.write(line);
+            writer.newLine();
         } catch (IOException e) {
             log.error("Error while writing to file: " + e.getMessage(), e);
         }
@@ -67,4 +68,13 @@
             log.error("Error while writing to file: " + e.getMessage(), e);
         }
     }
+
+    /**
+     * Helper function to return the writer instance for sub classes
+     * to write if any additional information.
+     * @return writer of the stream consumer. 
+     */
+    public BufferedWriter getWriter() {
+        return writer;
+    }
 }
--- a/buildframework/helium/external/helium-antlib/core/tests/src/com/nokia/helium/core/plexus/tests/TestFileStreamConsumer.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/core/tests/src/com/nokia/helium/core/plexus/tests/TestFileStreamConsumer.java	Wed Jun 23 16:36:23 2010 +0300
@@ -35,7 +35,7 @@
         consumer.consumeLine("Hello World!");
         consumer.consumeLine("Bonjour monde!");
         consumer.close();
-        assertTrue(temp.length() == 28);
+        assertTrue(temp.length() == 26 + System.getProperty("line.separator").length()*2);
     }
 
 }
--- a/buildframework/helium/external/helium-antlib/diamonds/src/com/nokia/helium/diamonds/DiamondsListenerImpl.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/diamonds/src/com/nokia/helium/diamonds/DiamondsListenerImpl.java	Wed Jun 23 16:36:23 2010 +0300
@@ -252,9 +252,7 @@
                     diamondsProperties.setDiamondsBuildID(buildID);
                     project.setProperty(diamondsProperties.getProperty("buildid-property"),
                             diamondsProperties.getDiamondsBuildID());
-                    log.info("Got build id from diamonds"
-                            + diamondsClient.getBuildId(outputFile
-                                    .getAbsolutePath()));
+                    log.info("Got build id from diamonds: " + buildID);
                 } else {
                     diamondsProperties.setDiamondsBuildID(buildID);
                     project.setProperty(diamondsProperties.getProperty("buildid-property"),
--- a/buildframework/helium/external/helium-antlib/logging/src/com/nokia/helium/logger/ant/listener/AntLogRecorderEntry.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/logging/src/com/nokia/helium/logger/ant/listener/AntLogRecorderEntry.java	Wed Jun 23 16:36:23 2010 +0300
@@ -95,6 +95,14 @@
             record = state.booleanValue();
         }
     }
+
+    /**
+     * Get the current state of the recorder
+     * @param state
+     */
+    public boolean getRecordState() {
+        return record;
+    }
     
     /**
      * To set the regexp to filter the logging.
@@ -338,6 +346,14 @@
             project.addBuildListener(this);
         }
     }
+    
+    /**
+     * To return the project name associated with recorder.
+     * @return
+     */
+    public Project getProject() {
+        return this.project;
+    }
 
     /**
      * @since 1.6.2
@@ -404,5 +420,6 @@
         
     }
     
-
+    
+    
 }
--- a/buildframework/helium/external/helium-antlib/logging/src/com/nokia/helium/logger/ant/taskdefs/LogRecorder.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/logging/src/com/nokia/helium/logger/ant/taskdefs/LogRecorder.java	Wed Jun 23 16:36:23 2010 +0300
@@ -101,6 +101,9 @@
                         antLoggingHandler.doLoggingAction("default", false, "Stopping", this);
                     }
                 }
+                if (!recorder.getRecordState() && recorder.getProject() != getProject()) {
+                    recorder.setProject(getProject());
+                }
                 recorder.reopenFile();
                 recorder.setRecordState(start);
             } else {
--- a/buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataLogCondition.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataLogCondition.java	Wed Jun 23 16:36:23 2010 +0300
@@ -100,7 +100,7 @@
         
         MetaDataDb db = new MetaDataDb(fileName.getAbsolutePath());
         
-        String sql = "select count(data) as COUNT from metadata INNER JOIN logfiles ON logfiles.id=metadata.logpath_id where path like '%" + logFile + "%' and priority_id = " + prty.getValue();
+        String sql = "select count(data) as COUNT from metadata INNER JOIN logfiles ON logfiles.id=metadata.logpath_id where path like '%" + logFile + "' and priority_id = " + prty.getValue();
         
         //System.out.println(sql);
         List<Map<String, Object>> records = db.getRecords(sql);
--- a/buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataRecord.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataRecord.java	Wed Jun 23 16:36:23 2010 +0300
@@ -128,6 +128,10 @@
             log("time after recording to db" + new Date());
             log.debug("Successfully writen to DB");
         } catch (BuildException ex1) {
+            String message = ex1.getMessage();
+            if ( message != null) {
+                log("Exception: " + message);
+            }
             if (failOnError) {
                 throw ex1;
             }
--- a/buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/types/LogMetaDataInput.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/types/LogMetaDataInput.java	Wed Jun 23 16:36:23 2010 +0300
@@ -26,6 +26,8 @@
 import java.util.List;
 import java.util.Vector;
 import java.util.Iterator;
+import java.util.Map;
+import java.util.Hashtable;
 import java.util.regex.Pattern;
 import org.apache.tools.ant.types.FileSet;
 import org.apache.tools.ant.DirectoryScanner;
@@ -170,7 +172,7 @@
                 currentFileIndex ++;
             }
         } catch (Exception ex1 ) {
-            log.info("Exception processing stream: " + ex1.getMessage());
+            //log.info("Exception processing stream: " + ex1.getMessage());
             log.debug("exception while parsing the stream", ex1);
             throw ex1;
         }
@@ -252,13 +254,30 @@
      * @param lineNumber of the text message
      */
     protected boolean findAndAddEntries(String logTextInfo, String currentComponent, 
-            String logPath, int lineNumber)throws Exception {
+            String logPath, int lineNumber) throws Exception {
+        return findAndAddEntries(logTextInfo, currentComponent, logPath, lineNumber, null);
+    }
+
+    /**
+     * Looks for the text which matches the filter regular expression and adds the entries to the database.
+     * @param logTextInfo text message to be searched with filter regular expressions
+     * @param priority for the entry
+     * @param currentComponent of the logtextInfo
+     * @param logpath fo;e fpr wjocj tje text info has to be looked for with filter expression
+     * @param lineNumber of the text message
+     * @param stat object to capture statistics about the parsing.
+     */
+    protected boolean findAndAddEntries(String logTextInfo, String currentComponent, 
+            String logPath, int lineNumber, Statistics stat) throws Exception {
         boolean entryAdded = false; 
         String[] logText = logTextInfo.split("\n");
         String severity = null;
         for (int i = 0; i < logText.length; i++) {
             severity = getSeverity(logText[i]);
-            if ( severity != null) {
+            if (severity != null) {
+                if (stat != null) {
+                    stat.incrementSeverity(severity);
+                }
                 addEntry(severity, currentComponent, logPath, 
                         i + lineNumber, logText[i]);
                 if (!entryAdded) {
@@ -296,7 +315,12 @@
             try {
                 retValue = isEntryAvailable();
             } catch ( Exception ex) {
-                throw new BuildException("Exception while analysing errors from the log:", ex);
+                
+                String message = ex.getMessage();
+                if (message == null ) {
+                    message = "";
+                }
+                throw new BuildException("Exception while analysing errors from the log:\n " + message, ex);
             }
             return retValue;
         }
@@ -322,4 +346,37 @@
             return entry;
         }
     }
+    
+    /**
+     * This class capture statistics about the number of severity counted when 
+     * parsing, the log.
+     */
+    public class Statistics {
+        private Map<String, Integer> statistics = new Hashtable<String, Integer>();
+        
+        /**
+         * Increment the severity counter by 1.
+         */
+        public void incrementSeverity(String severity) {
+            severity = severity.toLowerCase();
+            if (statistics.get(severity) == null) {
+                statistics.put(severity, new Integer(1));
+            } else {
+                statistics.put(severity, new Integer(statistics.get(severity).intValue() + 1));
+            }
+        }
+        
+        /**
+         * Get the severity counter.
+         * @return the number of message with the mentioned severity.
+         */
+        public int getSeveriry(String severity) {
+            severity = severity.toLowerCase();
+            if (statistics.get(severity) == null) {
+                return 0;
+            } else {
+                return statistics.get(severity).intValue();
+            }
+        }
+    }
 }
\ No newline at end of file
--- a/buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/types/SBSLogMetaDataInput.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/types/SBSLogMetaDataInput.java	Wed Jun 23 16:36:23 2010 +0300
@@ -46,7 +46,6 @@
  */
 public class SBSLogMetaDataInput extends XMLLogMetaDataInput {
 
-    private static final String SPECIAL_CASE_REG_EX = "(make.exe|make): \\*\\*\\*.*(/.*)(_exe|_dll|_pdd|_ldd|_kext|_lib)/.*";
 
     private static final String DRIVE_LETTER_REGEX = "(([a-z]|[A-Z]):(\\\\|/))(.*)(/bld\\.inf)";
 
@@ -58,11 +57,17 @@
     
     private String logTextInfo = "";
     
+    private String recipeStatus = "ok";
+    
     private HashMap<String, List <CategoryEntry>> generalTextEntries = new HashMap<String, List <CategoryEntry>>();
     
     private CategorizationHandler categorizationHandler;
     
+    private List<SpecialRegex> specialRegexPatternList = new ArrayList<SpecialRegex>();
+
     private int lineNumber;
+    
+    private boolean inMainDataSection;
 
     private boolean recordText;
     
@@ -78,7 +83,8 @@
      * Constructor
      */
     public SBSLogMetaDataInput() {
-        specialCasePattern = Pattern.compile(SPECIAL_CASE_REG_EX);
+        specialRegexPatternList.add(new SpecialRegex("(make.exe|make): \\*\\*\\* No rule to make target.*needed by `(.*)'.*", 2));
+        specialRegexPatternList.add(new SpecialRegex("(make.exe|make): \\*\\*\\* \\[(.*)\\].*", 2));
     }
     
     
@@ -140,52 +146,51 @@
      * @param streamReader: the input stream reader which contains the xml data to be parsed for recording data.
      * @return true if there are any element to be added to the database.
      */
-    public boolean characters (XMLStreamReader streamReader) {
+    public boolean characters (XMLStreamReader streamReader) throws Exception {
+        HashMap<String, Integer> toProcess = new HashMap<String, Integer>(); 
         if (recordText) {
             logTextInfo += streamReader.getText();
         } else {
-            if (!additionalEntry) {
-                additionalEntry = true;
-            }
-            String cdataText = streamReader.getText().trim();
-            String [] textList = cdataText.split("\n");
-            for (String text : textList) {
-                Matcher specialCaseMatcher = specialCasePattern.matcher(text);
-                List <CategoryEntry> entryList  = null;
-                if (specialCaseMatcher.matches()) {
-                    String componentName = specialCaseMatcher.group(2);
-                    String extension = specialCaseMatcher.group(3); 
-                    String componentWithTarget =  (componentName.substring(1) + "." 
-                        + extension.substring(1)).toLowerCase();
-                    CategoryEntry newEntry = new CategoryEntry(text, componentWithTarget ,
-                            "error", streamReader.getLocation().getLineNumber(), getCurrentFile().toString());
-                    entryList = generalTextEntries.get(componentWithTarget); 
-                    if ( entryList == null) {
-                        entryList = new ArrayList<CategoryEntry>();
-                        generalTextEntries.put(componentWithTarget, entryList);
+            if (inMainDataSection) {
+                String cdataText = streamReader.getText().trim();
+                String [] textList = cdataText.split("\n");
+                int i = 0;
+                for (String text : textList) {
+                    boolean added = false;
+                    if (text.trim().equals("")) {
+                        continue;
                     }
-                    entryList.add(newEntry);
-                } else {
-                    String componentWithTarget = null;
-                    int indexMakeString = text.indexOf( "make: ***" );
-                    int indexSlash = text.lastIndexOf( "/" );
-                    if (indexMakeString != -1 && indexSlash != -1) {
-                        int indexExt = ( indexSlash  + 1) + text.substring(indexSlash).indexOf( "." );
-                        if ( indexExt != -1 ) {
-                            componentWithTarget = (text.substring(indexSlash,indexExt + 3)).toLowerCase();
+                    for (SpecialRegex specialRegex : specialRegexPatternList) {
+                        Matcher matcher = specialRegex.getRegexPattern().matcher(text); 
+                        int groupPosition = specialRegex.getGroupPosition();
+                        List <CategoryEntry> entryList  = null;
+                        if (matcher.matches()) {
+                            String componentName = matcher.group(groupPosition).toLowerCase();
+                            CategoryEntry newEntry = new CategoryEntry(text, componentName ,
+                                    "error", streamReader.getLocation().getLineNumber(), getCurrentFile().toString());
+                            entryList = generalTextEntries.get(componentName); 
+                            if ( entryList == null) {
+                                entryList = new ArrayList<CategoryEntry>();
+                                generalTextEntries.put(componentName, entryList);
+                            }
+                            entryList.add(newEntry);
+                            added = true;
+                            break;
                         }
                     }
-                    if (componentWithTarget != null) {
-                        CategoryEntry newEntry = new CategoryEntry(text, componentWithTarget ,
-                                "error", streamReader.getLocation().getLineNumber(), getCurrentFile().toString());                    
-                        entryList = generalTextEntries.get(componentWithTarget);
-                        if (entryList == null) {
-                            entryList = new ArrayList<CategoryEntry>();
-                            generalTextEntries.put(componentWithTarget, entryList);
-                        }
-                        entryList.add(newEntry);
+                    if (!added) {
+                        toProcess.put(text.trim(), streamReader.getLocation().getLineNumber() + i);
                     }
-                    
+                    i++;
+               }
+                boolean entryCreated = false;
+                //Check for any general errors.
+                for (String textString : toProcess.keySet()) {
+                    boolean created = findAndAddEntries(textString, "general",
+                        getCurrentFile().toString(), toProcess.get(textString));
+                    if (created && !entryCreated ) {
+                        entryCreated = true;
+                    }
                 }
             }
         }
@@ -202,19 +207,28 @@
             String tagName = streamReader.getLocalName();
             if (tagName.equalsIgnoreCase("buildlog")) {
                 log.debug("starting with buildlog");
+                inMainDataSection  = true;
             }
             if (tagName.equalsIgnoreCase("recipe") ) {
                 lineNumber = streamReader.getLocation().getLineNumber();
                 currentComponent = getComponent(streamReader);
                 recordText = true;
+                inMainDataSection = false;
+                recipeStatus = "ok";
+            } if (tagName.equalsIgnoreCase("status") ) {
+                String exit = streamReader.getAttributeValue(null, "exit");
+                recipeStatus = (exit != null) ? exit : "ok";
             } else if (tagName.equalsIgnoreCase("error")
                     || tagName.equalsIgnoreCase("warning")) {
                 lineNumber = streamReader.getLocation().getLineNumber();
                 currentComponent = getComponent(streamReader);
                 recordText = true;
+                inMainDataSection = false;
             } else if (tagName.equalsIgnoreCase("whatlog") ) {
                 currentComponent = getComponent(streamReader);
+                inMainDataSection = false;
             } else if (tagName.equalsIgnoreCase("time")) {
+                inMainDataSection = false;
                 currentElapsedTime = Float.valueOf(getAttribute("elapsed", streamReader)).floatValue();
                 if (currentComponent != null) {
                     TimeEntry timeObject = componentTimeMap.get(currentComponent);
@@ -225,6 +239,10 @@
                         timeObject.addElapsedTime(currentElapsedTime);
                     }
                 }
+            } else if (tagName.equalsIgnoreCase("clean")) {
+                inMainDataSection = false;
+            } else if (tagName.equalsIgnoreCase("info")) {
+                inMainDataSection = false;
             }
         } catch (Exception ex) {
             log.debug("exception in startelement",ex);
@@ -287,20 +305,27 @@
         try {
             String tagName = streamReader.getLocalName();
             if (tagName.equalsIgnoreCase("recipe")) {
+                inMainDataSection = true;
                 recordText = false;
                 if (logTextInfo != null) {
                     if (currentComponent == null) {
                         currentComponent = "general";
                     }
+                    Statistics stat = new Statistics();
                     boolean entryCreated = findAndAddEntries(logTextInfo, currentComponent,
-                            getCurrentFile().toString(), lineNumber);
+                            getCurrentFile().toString(), lineNumber, stat);
+                    if (stat.getSeveriry("error") == 0 && recipeStatus.equals("failed")) {
+                        addEntry("error", currentComponent, getCurrentFile().toString(), 
+                                lineNumber, "ERROR: recipe exit status is failed.");
+                        entryCreated = true;
+                    }
                     logTextInfo = "";
-                    if ( entryCreated) {
-                        return true;
-                    }
+                    recipeStatus = "ok";
+                    return entryCreated;
                 }
             } else if (tagName.equalsIgnoreCase("error")
                     || tagName.equalsIgnoreCase("warning")) {
+                inMainDataSection = true;
                 recordText = false;
                 if (currentComponent == null) {
                     currentComponent = "general";
@@ -310,9 +335,14 @@
                 logTextInfo = "";
                 return true;
             } else if (tagName.equalsIgnoreCase("whatlog") ) {
+                inMainDataSection = true;
                 addEntry("default", currentComponent, getCurrentFile().toString(), -1, 
                         "");
                 return true;
+            } else if (tagName.equalsIgnoreCase("clean")) {
+                inMainDataSection = true;                
+            } else if (tagName.equalsIgnoreCase("info")) {
+                inMainDataSection = true;
             }
         } catch (Exception ex) {
             log.debug("Exception while processing for sbs metadata input", ex);
@@ -322,6 +352,25 @@
     }
 }
 
+class SpecialRegex {
+    private Pattern regexPattern;
+    private int groupPosition;
+
+    public SpecialRegex(String exp, int pos) {
+        regexPattern = Pattern.compile(exp);
+        groupPosition = pos;
+    }
+    
+    public Pattern getRegexPattern() {
+        return regexPattern;
+    }
+    
+    public int getGroupPosition() {
+        return groupPosition;
+    }
+}
+
+
 /* This class stores the temporary Time entry which is being recorded for each data
  * at the end of the build and during isAdditionalEntry function, the time for the component
  * is updated in the database.
@@ -336,8 +385,8 @@
      * @param elapsedTime: time duration of the component.
      * @path of the component.
      */
-    public TimeEntry(float elapsedTime, String path) {
-        elapsedTime = elapsedTime;
+    public TimeEntry(float time, String path) {
+        elapsedTime = time;
         filePath = path;
     }
     
@@ -569,7 +618,8 @@
         int index = 0;
         Set<String> categorySet = categoryList.keySet();
         for (String key : categorySet) {
-            if (path.indexOf(key) != -1) {
+        if (path.toLowerCase().equals(key)) {
+
                 List<CategoryEntry> entry = categoryList.get(key);
                 categoryList.remove(key);
                 return entry;
@@ -632,6 +682,15 @@
                     close();
                 }
             }
+            Set<String> categorySet = categoryList.keySet();
+            for (String key : categorySet) {
+                currentList = categoryList.remove(key);
+                if (currentList != null && !currentList.isEmpty()) {
+                    updateCategoryEntries(currentList, "general");
+                    CategoryEntry entry = (CategoryEntry)currentList.remove(0);
+                    return entry;
+                }
+            }
         } catch ( Exception ex) {
             log.debug("exception in categorization",ex);
             throw ex;
--- a/buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/types/XMLLogMetaDataInput.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/metadata/src/com/nokia/helium/metadata/ant/types/XMLLogMetaDataInput.java	Wed Jun 23 16:36:23 2010 +0300
@@ -144,5 +144,5 @@
      * @param streamReader: the input stream reader which contains the xml data to be parsed for recording data.
      * @return true if there are any element to be added to the database.
      */
-    abstract boolean characters (XMLStreamReader streamReader);
+    abstract boolean characters (XMLStreamReader streamReader) throws Exception;
 }
--- a/buildframework/helium/external/helium-antlib/metadata/tests/functionality/test_regex.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/metadata/tests/functionality/test_regex.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -110,6 +110,26 @@
         </au:assertTrue>
     </target>
 
+    <!-- Test categorization without cleanLogFile
+    and with an empty failed recipe.
+    -->
+    <target name="test-categorization-nocleanlog-failed-empty-recipe">
+        <delete file="${project.dir}/../output/empty_categorization.sqlite" failonerror="false" />
+        <echo message="categorization validation" />
+        <hlm:metadatarecord database="${project.dir}/../output/empty_categorization.sqlite">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="categorization_failed_empty_recipe.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="categorization_failed_empty_recipe.log" db="${project.dir}/../output/empty_categorization.sqlite" property="empty_nocleanlog_errors"/>
+        <au:assertTrue>
+            <equals arg1="${empty_nocleanlog_errors}" arg2="1"/>
+        </au:assertTrue>
+    </target>
+
     <target name="test-log-entry-for-no-errors">
         <delete file="${project.dir}/../output/log-entry-for-no-error.sqlite" failonerror="false" />
         <echo message="categorization validation" />
@@ -501,12 +521,43 @@
             <hlm:metadataHasSeverity severity="fatal" log="dp.log" db="${project.dir}/../output/dp.sqlite" />
         </au:assertFalse>
     </target>
-    
+
+    <target name="test-valid-log">
+        <delete file="${project.dir}/../output/valid_log.sqlite" failonerror="false" />
+        <echo message="---------------- test-valid-log ----------------------" />
+        <hlm:metadatarecord database="${project.dir}/../output/valid_log.sqlite">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="valid_log.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+    </target>
+
+    <target name="test-log-with-same-root-name">
+        <delete file="${project.dir}/../output/log-with-same-root-name.sqlite" failonerror="false"/>
+        <hlm:metadatarecord database="${project.dir}/../output/log-with-same-root-name.sqlite">
+            <hlm:textmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include name="log-with-same-root-name.log*"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter priority="ERROR" regex="^ERROR:.*" description="error" />
+                </metadatafilterset>
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="log-with-same-root-name.log" db="${project.dir}/../output/log-with-same-root-name.sqlite" property="log-with-same-root-name.log.error"/>
+        <au:assertTrue message="We should only find 1 error">
+            <equals arg1="${log-with-same-root-name.log.error}" arg2="1"/>
+        </au:assertTrue>
+    </target>
+
     <target name="test-metadata-ant" depends="test-ant_log_metadata_input, test-readdata,test-generate-summary  " />
     <target name="test-metadata-abld" depends="test-abld_log_metadata_input, test-readdata,test-generate-summary  " />
     <target name="test-metadata-policy" depends="test-policy_metadata_input, test-readdata,test-generate-summary  " />
     <target name="test-metadata-text" depends="test-text_log_metadata_input, test-readdata,test-generate-summary  " />
     <target name="test-metadata-all" depends="test-all-regex-filterfile, test-readdata,test-generate-summary  " />
     <target name="test-metadata-combine" depends="test-all-regex-combined, test-readdata,test-generate-summary  " />
-           
+
 </project>
\ No newline at end of file
--- a/buildframework/helium/external/helium-antlib/sbs/src/com/nokia/helium/sbs/ant/taskdefs/SBSTask.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/sbs/src/com/nokia/helium/sbs/ant/taskdefs/SBSTask.java	Wed Jun 23 16:36:23 2010 +0300
@@ -42,7 +42,7 @@
 import com.nokia.helium.sbs.SBSException;
 import java.util.ArrayList;
 import java.util.Hashtable;
-import com.nokia.helium.core.plexus.FileStreamConsumer;
+import com.nokia.helium.sbs.plexus.SBSErrorStreamConsumer;
 import java.util.Collection;
 
 public class SBSTask extends Task {
@@ -112,6 +112,7 @@
      * @throws BuildException
      */
     public void execute() {
+        SBSErrorStreamConsumer sbsErrorConsumer = null;
         if (sbsInputName == null) {
             throw new BuildException("sbsInputName is not defined");
         }
@@ -121,7 +122,6 @@
         if (workingDir == null) {
             throw new BuildException("workingDir must be set");
         }
-        
         List <String> filteredLayers = getFilteredLayers();
         SBSCommandBase sbsCmd = new SBSCommandBase();
         sbsCmd.setWorkingDir(workingDir);
@@ -135,8 +135,9 @@
                 log.debug("redirecting error to Antstream");
                 sbsCmd.addErrorLineHandler(new AntStreamConsumer(this));
             } else {
+                sbsErrorConsumer = new SBSErrorStreamConsumer(errorFile);
                 log.debug("redirecting error to file stream");
-                sbsCmd.addErrorLineHandler(new FileStreamConsumer(errorFile));
+                sbsCmd.addErrorLineHandler(sbsErrorConsumer);
             }
         } catch (java.io.FileNotFoundException ex) {
             log.info("file path: " + errorFile + "Not valid" );
@@ -195,18 +196,26 @@
                 sbsCmd.execute(cmdOptions.toString());
             }
         } catch (SBSException sex) {
-            log.info("SBS exception occured during sbs execution");
+            log.debug("SBS exception occured during sbs execution", sex);
             if (failOnError) {
                 throw new BuildException("exception during SBS execution", sex);
             }
         } catch (Exception ex) {
-            log.info("Exception occured during sbs execution");
+            log.debug("Exception occured during sbs execution", ex);
             if (failOnError) {
                 throw new BuildException("exception during SBS execution", ex);
             }
+        } finally {
+            //Called to update the error stream, better would be the commandbase
+            //handling the closing of streams in case of exceptions.
+            if (sbsErrorConsumer != null) {
+                sbsErrorConsumer.close();
+            }
         }
         endTime = new Date();
-        updateSBSLogStatistics(statsLog, outputLogName);
+        if (statsLog != null) {
+            updateSBSLogStatistics(statsLog, outputLogName);
+        }
     }
 
     private List<String> getFilteredLayers() {
--- a/buildframework/helium/external/helium-antlib/sbs/src/com/nokia/helium/sbs/ant/types/SBSInput.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/sbs/src/com/nokia/helium/sbs/ant/types/SBSInput.java	Wed Jun 23 16:36:23 2010 +0300
@@ -142,7 +142,7 @@
                throw new BuildException("Reference id (" + refId.getRefId() + ") of sbsinput list is not valid");
             }
             if (sbsInputObject != null && sbsInputObject instanceof SBSInput) {
-                SBSMakeOptions options = ((SBSInput)sbsInputObject).getFullSBSMakeOptions(); 
+                SBSMakeOptions options = ((SBSInput)sbsInputObject).getFullSBSMakeOptions();
                 if (options != null ) {
                     if (sbsMakeOptionsList == null) {
                         sbsMakeOptionsList = new Vector<SBSMakeOptions>();
@@ -197,6 +197,7 @@
         Vector<SBSMakeOptions> sbsMakeOptionsList = null;
         SBSMakeOptions resultSet = null;
         Vector<SBSMakeOptions> currentOptions = getSBSMakeOptions(this);
+
         if (currentOptions != null && !currentOptions.isEmpty()) {
             if (sbsMakeOptionsList == null ) {
                 sbsMakeOptionsList = new Vector<SBSMakeOptions>();
@@ -214,8 +215,10 @@
         }
         if (sbsMakeOptionsList != null ) {
             String engine = null;
+            String ppThreads = null;
             for (SBSMakeOptions varSet : sbsMakeOptionsList) {
                 String currentEngine = varSet.getEngine();
+                String currentThread = varSet.getPPThreads();
                 if (currentEngine != null) {
                     if (engine == null) {
                         engine = currentEngine;
@@ -232,6 +235,10 @@
                 if (resultSet == null ) {
                     resultSet = new SBSMakeOptions();
                 }
+                if (ppThreads == null && currentThread != null) {
+                    ppThreads = currentThread;
+                    resultSet.setPPThreads(ppThreads);
+                }
                 for (Variable var : varSet.getVariables()) {
                     resultSet.add(var);
                 }
--- a/buildframework/helium/external/helium-antlib/sbs/src/com/nokia/helium/sbs/ant/types/SBSMakeOptions.java	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/external/helium-antlib/sbs/src/com/nokia/helium/sbs/ant/types/SBSMakeOptions.java	Wed Jun 23 16:36:23 2010 +0300
@@ -78,9 +78,11 @@
     }
     
     public String getPPThreads() {
-        if (!initialized) {
-            initializeAll();
-            initialized = true;
+        if (ppThreads == null) {
+            if (!initialized) {
+                initializeAll();
+                initialized = true;
+            }
         }
         return ppThreads;
     }
@@ -90,12 +92,14 @@
      * @return type of make engine
      */
     public String getEngine() {
-        if (!initialized) {
-            initializeAll();
-            initialized = true;
-        }
         if (engine == null) {
-            throw new BuildException("engine should not be null");
+            if (!initialized) {
+                initializeAll();
+                initialized = true;
+            }
+            if (engine == null) {
+                throw new BuildException("engine should not be null");
+            }
         }
         return engine;
     }
@@ -121,7 +125,7 @@
                         throw new BuildException(" Config's engine type " + engine + " not matching with reference : " 
                                 + refId.getRefId() + ": engine: " + refEngine);
                     }
-                    if (ppThreads == null) {
+                    if (ppThreads == null && threads != null) {
                         ppThreads = threads;
                     }
                     if (engine == null) {
--- a/buildframework/helium/helium.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/helium.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -201,7 +201,6 @@
     <property name="ccm.base.dir" location="${ccm.home.dir}\${minor.version}"/>
     <property name="prep.build.dir" location="${prep.root.dir}/${build.id}"/>
     <property name="build.output.dir" location="${build.drive}/output"/>
-    <property name="diamonds.build.output.dir" location="${build.output.dir}/diamonds"/>
     <property name="build.sisfiles.dir" location="${build.output.dir}/sisfiles"/>
     <property name="zips.build.dir" location="${build.output.dir}/build_area/engineering_english"/>
     <property name="zips.loc.dir" location="${build.output.dir}/build_area/localised"/>
@@ -210,6 +209,7 @@
     <property name="build.log.dir" location="${build.output.dir}/logs"/>
     <property name="prep.log.dir" location="${build.log.dir}/prep"/>
     <property name="compile.log.dir" location="${build.log.dir}/compile"/>
+    <property name="diamonds.build.output.dir" location="${build.log.dir}/diamonds"/>
     <property name="test.log.dir" location="${build.log.dir}/test"/>
     <property name="archive.log.dir" location="${build.log.dir}/archive"/>
     <property name="roms.log.dir" location="${build.log.dir}/roms"/>       
--- a/buildframework/helium/tests/data/distribution.policy.extended_for_sf.id_status.csv	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tests/data/distribution.policy.extended_for_sf.id_status.csv	Wed Jun 23 16:36:23 2010 +0300
@@ -1,133 +1,5 @@
 ID,Include in build?,Regexp,Symbian Foundation License,Eclipse Public License,Supplier,Description,Contact,Other Notes
-0,Yes,Nokia,,,Nokia,Free to deliver,,
-1,No,Nokia,,,Nokia,Nokia internal sw,,
-3,Yes,Nokia,Yes,No,Nokia,Symbian Foundation License,,
-7,Yes,Nokia,No,Yes,Nokia,Eclipse Public License,,
-10,Yes,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,eMuzed AMR NB encoder,Eugene Tsai ,10 - AmrNbCodecPlugin         -> project for AMR NB decoder & encoder
-11,Yes,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,eMuzed AMR NB decoder,Eugene Tsai ,
-12,Yes,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,eMuzed AMR WB encoder,Eugene Tsai ,12 - AmrWbCodecPlugin         -> project for AMR WB decoder
-13,Yes,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,eMuzed AMR WB decoder,Eugene Tsai ,
-21,Yes,Beatnik,,,Beatnik Inc.,MobileBAE v2.1 audio engine from Beatnik Inc.,Vesa Jaamuru,
-30,Yes,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,eMuzed MP3 decoder,Eugene Tsai ,30 - MP3CodecPlugin           -> project for MP3 decoder
-40,Yes,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,eMuzed MPEG-4 AAC decoder,Eugene Tsai ,>40 - AACCodecPlugin           -> project for AAC decoder
-41,Yes,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,eMuzed eAAC+ decoder ,Eugene Tsai ,>40 - AacEncoderPlugin         -> project for AAC-LC encoder
-42,Yes,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,eMuzed MPEG-4 AAC encoder,Eugene Tsai ,>40 - EAacPlusCodecPlugin      -> project for EAacPlus decoder
-50,Yes,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,eMuzed H.263 encoder,Vesa Lunden,
-51,Bin,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,Emuzed MDF H263/MPEG4 Decoder,Brian Yan,
-52,Yes,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,Emuzed MDF Video Postprocessor,Brian Yan,
-53,Bin,Nokia,,,Nokia,NRC MDF H264 (AVC) Decoder,Brian Yan,
-54,No,Helix,,,Helix,Helix MDF RealVideo-8/9 Decoder,Brian Yan,
-55,No,Helix,,,Helix,Helix CMMFCodec RealAudio-8 Decoder,Brian Yan,
-56,No,Helix,,,Helix,Helix CMMFCodec RealAudio-Voice Decoder,Brian Yan,
-57,Yes,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,Emuzed h.264/AVC ARM11 video encoder,Hippel„inen Juha-Pekka,
-60,Yes,PacketVideo,,,PacketVideo,Circuit switched Video Telephony Solution (3G-324M) from PacketVideo Corporation ,Rantanen Pasi,
-80,Yes,Real,,,Real Networks Inc.,RealOnePlayerEngine,Simon Khoo,
-81,Bin,Helix,,,Helix,"Helix DNA engine sources, restricted protocol and codex from RealNetworks, Inc. ",Yu I-Chin,
-82,Yes,Helix,,,Helix,"Helix DNA engine binaries, restricted protocol and codex from RealNetworks, Inc. ",Yu I-Chin,
-100,Yes,Sun,,,Sun Microsystems,Java JSR-135,Simo F„lt,
-101,Yes,Nokia,,,Nokia,Java JSR-75,Simo F„lt,
-102,Yes,Sun,,,Sun Microsystems,Java J2ME,Simo F„lt,General Java environment files
-103,Yes,.,,,N/A,KVM virtual machine,Simo F„lt,
-104,Yes,.,,,N/A,Monty virtual machine,Simo F„lt,
-105,Yes,Sun,,,Sun Microsystems,Software implementation of J2ME Web Services Specification (JSR-172),Simo F„lt,
-106,Yes,Sun,,,Sun Microsystems,Software implementation of Security and Trust Services API for J2ME (JSR-177),Simo F„lt,
-107,No,Sun,,,Sun Microsystems,Java VSCL implementation,Simo F„lt,
-108,No,Sun,,,Sun Microsystems,Java for iMode,Simo F„lt,
-109,No,Nokia,,,Nokia,Nokia proprietary Java API supplements,Simo F„lt,
-110,Yes,Tegic,,,Tegic,Tegic T9 WINS binaries,Antti Sepp„l„,
-111,No,Tegic,,,Tegic,"THUMB of T9 from Tegic Communications, Inc.",Antti Sepp„l„,
-115,Yes,Matsutake,,,Matsutake,Matsutake Predictive Text Input Engine Binaries,Antti Sepp„l„,PTI Engine only for Japanese SDK
-116,No,Tegic,,,Tegic,Xt9TegicDelivery,Antti Sepp„l„,"From 5.0 releases onwards, never delivered"
-117,No,Zi,,,Zi Corporation,ZiDelivery,Antti Sepp„l„,"From 5.0 releases onwards, delivered by contracts"
-130,No,CESI,,,CESI,Chinese bitmap fonts from Chinese Electronics Standardization Technical Institute.,Vesa H„rk”nen,
-131,Yes,Ricoh,,,Ricoh,Ricoh Japan fonts,Vesa H„rk”nen,
-132,Yes,Agfa,,,Agfa,Agfa Thai fonts,Vesa H„rk”nen,
-133,Yes,Agfa,,,Agfa,"Vector fonts & rendering engine from Monotype Imaging (Agfa) including WGL4, Arabic, Hebrew, Thai, Japanese, Chinese",Vesa H„rk”nen,Platform fonts that are sublicensed
-140,Yes,SJTU,,,SJTU,SJTU Sunway Chinese-English dictionary,Nie Xin,
-151,Yes,Entrust,,,Entrust,Entrust root certificates,Ilhan Gurel  ,
-152,Yes,Verisign,,,Verisign,Verisign root certificates,Ilhan Gurel  ,
-153,Yes,Symbian,,,Symbian Software Ltd,Symbian root certificates,Ilhan Gurel  ,
-157,Yes,BeTrusted,,,BeTrusted Ltd.,Root Certificates from BeTrusted Ltd.,Ilhan Gurel  ,
-158,Yes,Equifax,,,Equifax,Equifax root certificate,Ilhan Gurel  ,
-159,Yes,Valicert,,,Valicert,Valicert Class2 CA,Ilhan Gurel  ,\s60\mw\securityservice\spkiutilities\Certificates\data\S60_certificates\Valicert
-161,Yes,CyberTrust,,,CyberTrust,CyberTrust,Ilhan Gurel  ,securityservices\pkiutilities\Certificates\data\S60_certificates\CyberTrust
-162,Yes,Starfield,,,Starfield,Starfield,Ilhan Gurel  ,\s60\mw\securityservices\pkiutilities\Certificates\data\S60_certificates\Starfield
-163,Yes,GoDaddy,,,GoDaddy,GoDaddy,Ilhan Gurel  ,\s60\mw\securityservices\pkiutilities\Certificates\data\S60_certificates\GoDaddy
-165,Yes,.,,,GeoTrust,"GeoTrust root certificate, part of S60_certificates component","Heikkinen Timo.J (Nokia-D-MSW/Tampere), Hyttinen Teuvo (Nokia-D-MSW/Tampere)",3rd party
-171,Yes,Sun,,,Sun Microsystems,Java eSWT,Simo F„lt,Not allowed to go to licensees
-172,No,Nokia,,,Nokia,JSR-238 Mobile Internationalization API,Simo F„lt,Early dev for Taco
-180,Yes,Agfa,,,Agfa,"Vector fonts & rendering engine from Monotype Imaging (Agfa) including WGL4, Arabic, Hebrew, Thai, Japanese, Chinese",Mikko Tuokko,
-200,Yes,Netscape,,,Netscape,Netscape Plugin API,Eki Monni,
-210,No,Macromedia,,,Macromedia,Macromedia Flash,Michael Klingele ,
-220,No,3C|LLC,,,"3C, LLC","SD memory card specifications from 3C, LLC and related Nokia proprietary implementation",Jyri Lassi,legal contact
-230,Yes,Apache,,,Apache,Arabica & Xerces C++ XML parser (OSS),Mikko Amper,legal contact
-240,Yes,.,,,N/A,KJS Scripting Engine (OSS),Alan M. Lerner,
-241,Yes,.,,,N/A,Javascriptcore ,Alan M. Lerner,
-242,Yes,.,,,N/A,Webcore ,Alan M. Lerner,
-250,Yes,.,,,N/A,libxml2,Alan M. Lerner,
-260,No,Vodafone,,,Vodafone,Vodafone  pictographs,Attila Bencze,These are not allowed to be delivered for external licencees without Vodafone permission
-261,No,DoCoMo,,,DoCoMo,DoCoMo  pictographs,Attila Bencze,These are not allowed to be delivered for external licencees without DoCoMo permission
-280,No,Nokia,,,Nokia,CXX Specifications (related to WLAN) from Cisco,M„enp„„ Henri,3rd party or Complement or both?
-281,Bin,Nokia,,,Nokia,Cisco Compatible eXtensions (CCX) for WLAN devices binaries,Pekko Vehvil„inen,Allowed to be delivered
-290,Yes,.,,,N/A,3GP_EXT_Parser,Raharja Flo,
-300,Yes,Nokia,,,Nokia,FileBrowse 3.0 from Nokia,,
-310,No,Hanwang,,,Hanwang,OCR Technology including OCR engine and OCR language packages from Hanwang,Wang Lei 4,
-350,No,Vision,,,Vision Object,PtiEngine core which wraps HandWriting Recognition engine from Vision Object company,Hametvaara Vesa,3rd party
-400,No,.,,,N/A,Components implementing Japanese hadwriting recognition and virtual keyboard.,Tapio Hinkkanen,Nokia component implementation including 3rd party SW
-500,No,Vodafone,,,Vodafone,Vodafone Branding content,Sami Jylkk„,Complement
-510,No,DoCoMo,,,DoCoMo,Docomo Complement Package,Sami Jylkk„,Complement
-520,No,Vodafone,,,Vodafone,Vodafone Complement Package 1,Timo Suhonen,Complement
-525,No,Vodafone,,,Vodafone,Vodafone Complement Package 1.1,Gudena Teja ,Complement
-530,No,China,,,China Mobile,CMCC Complement Package,Tong Lifeng,Complement,,
-540,No,Vodafone,,,Vodafone,Vodafone Complement Package 2,Gudena Teja ,Complement,,
-545,No,Vodafone,,,Vodafone,"Vodafone Complement Package 2.1, Complement",Gudena Teja ,Complement,,
-546,No,Vodafone,,,Vodafone,Vodafone Complement Package 2.1G for Gadget,Gudena Teja ,Complement,,
-547,No,Vodafone,,,Vodafone,Vodafone Complement Package 2.1L for Lumiere,Gudena Teja ,Complement,,
-550,No,Orange,,,Orange,Orange Complement Package 2,Gudena Teja ,Complement,,
-551,No,Orange,,,Orange,"OCP2 (Orange CP Release 2.1 ). This is the next version of Orange Complementary package which includes Orange customizations and Orange specific IM branding.
-",Niittynen Anu (Nokia-D-MSW/Tampere),Complement,,
-560,No,mobile,,,T-mobile,T-mobile Complement Package 2,Gudena Teja ,Complement,,
-565,No,mobile,,,T-mobile,"T-mobile Complement Package 3, Complement",,,,Not delivered
-570,No,AT,,,AT & T,AT & T Complement Package,Gudena Teja ,Complement,,
-580,No,AT,,,AT & T,AT & T Complement Package 2,Fuentes Jose.A (Nokia-D-MSW/SanDiego),Complement,,
-600,No,Nokia,,,Nokia,Rosetta I-mode,Sarsila Kari,,,
-610,No,Nokia,,,Nokia,3.2 ED VoIP and CCE components ,Sami Uusitalo,not allowed to go to the licensees,,
-620,Yes,Nokia,,,Nokia,"CCE REQ components: cce, spsettings cch",Jouni Alan„r„,,,
-650,Bin,.,,,N/A,CASN RTS ,Katajainen Pasi,binary only,,
-700,No,.,,,N/A,WMDRM,Eckhart K”ppen and Simo Kivim„ki,,,
-800,Yes,Sun,,,Sun Microsystems,Java WECE External j9,Simo F„lt,"Saa menn„ S60 lisensoijille, mutta ei saa levitt„„ Nokian sis„ll„."
-810,Yes,Sun,,,Sun Microsystems,Java WEME Internal j9,Simo F„lt,"Saa levitt„„ Nokian sis„ll„, mutte EI saa menn„ ulkoisille asiakkaille."
-900,No,Zi,,,Zi Corporation,Decuma/HWR from Zi Corporation,Wang Lei,
-950,No,Nokia,,,Nokia,SP API Test Automation,Ville Ilvonen,To be removed from external licensees
-1000,No,Nokia,,,Nokia,PC Suite,Aki Lehto (prod. mngr),Complement
-1010,No,Nokia,,,Nokia,Nokia PoC Client,Teemu Polo,Complement
-1020,Yes,Nokia,,,Nokia,ThemeStudio,Janne K Kauppila,Complement
-1030,No,Nokia,,,Nokia,Nokia VPN Client,Timo Ruokolainen,Complement
-1040,No,Nokia,,,Nokia,Catalogs (Preminet Client),Ari Sutinen,Complement
-1050,No,Adobe,,,Adobe Corporation,PDF Reader from Adobe Corporation,Kimmo Uutela,Complement
-1060,No,.,,,N/A,MS Office viewers/editors in 3.0,Kimmo Uutela,Complement
-1070,No,Adobe|Macromedia,,,Adobe Corporation,FlashLite 1.1 binaries (bin in 2.8&3.0),Michael Klingele,Complement
-1075,No,Adobe|Macromedia,,,Adobe Corporation,FlashLite 2.0 sources,Michael Klingele,Complement
-1076,No,Adobe|Macromedia,,,Adobe Corporation,FlashLite 2.0 binaries,Michael Klingele,Complement
-1077,No,Adobe|Macromedia,,,Adobe Corporation,"Flashlite 3.0 sources, special delivery to SEMC only, maybe other licensees later",Michael Klingele,Complement
-1078,No,Adobe|Macromedia,,,Adobe Corporation,Flashlite 3.0 sources,Michael Klingele,
-1079,No,Adobe|Macromedia,,,Adobe Corporation,Flashlite 3.0 binaries,Michael Klingele,
-1080,No,Paragon,,,Paragon Technologie Gmbh,Zip Manager from Paragon Technologie Gmbh,Kimmo Uutela,Complement
-1090,No,Quickoffice ,,,QuickOffice,Quick Office,Pekka Karimaa (team manager),Complement
-1100,No,.,,,Nokia,"Mobile Search client contains two parts: Online Search and Active Search. Online Search enables end users to make search queries directly to 3rd party services (such as e.g. Google, Yahoo! and MSN). Active Search enables end users to search for local content items in the device. It is possible to disable the Online Search with a variant configuration file, during integration. In that case only Active Search (in-device search) remains in the client.",Tenhunen Jouko (Nokia-S&S/Espoo),Complement
-1120,Yes,eMuzed|Aricent,,,Aricent Communications Pvt. Ltd,eMuzed WMA decoder,Dan Plane/Timo Pastila ,>1120 - WMADecoderAPI          -> project for WMA decoder
-1130,Yes,Nokia,,,Nokia,MTP Protocol,Dan Plane/Timo Pastila ,
-1140,No,Microsoft,,,Microsoft,Windows Media DRM from Microsoft,Simo J„rvinen,Complement
-1160,No,Bend,,,Red Bend,vCurrentMobile Delta Generator and Installer from Red Bend,Hegde Rajesh ,Complement
-1170,No,Symantec,,,Symantec,Mobile Security from Symantec,,
-1180,No,Nokia,,,Nokia,"UI effects, phase 1",Juuso Kanner,Complement
-1190,Yes,Alliance,,,Wi-Fi Alliance,WLAN ASD Client from Wi-Fi Alliance (WFA),Niko Ojanen,3rd party
-1200,No,.,,,NA,AudioProxyServer  release ,Passila Mika.K ,Complement
-1201,No,N/A,,,3rd party,WMA 10 Professional audio codec,Bryan Honzaÿ,"WMA 10 Professional audio codec for the S60 platform. WMA 10 Pro supports profiles that include everything from full-resolution 24-bit/96 kHz audio in stereo, 5.1 channel, or even 7.1 channel surround sound, to highly efficient mobile capabilities at 24 Kbps to 96 Kbps for stereo, and 128 Kbps to 256 Kbps for 5.1-channel sound. WMA 10 Pro supports streaming, progressive download, or download-and-play delivery at 128 to 768 Kbps. "
-1300,Yes,.,,,"Red Hat, freedesktop.org",d-bus. Open source IPC library,Mahadevan Shankar (Nokia-D-MSW/Bangalore),Its not a 3rd party but an Open Source library. Yes to licensees and to all S60 SDKs. legal and IPR checks done.
-1301,Yes,.,,,"IMENDIO AB, www.loudmouth-project.org",Loudmouth. Open Source Library,Sharma Shrikumar.B (Nokia-D-MSW/Bangalore),This is a library that is used for last-step connections for xmpp protocol. It also performs certain xmpp protocol tasks.
-1302,Yes,.,,,"telepathy.freedesktop.org, Collabora Limited",telepathygabble. Open Source Library,Sharma Shrikumar.B (Nokia-D-MSW/Bangalore),This is an XMPP protocol connection manager. This uses loudmouth. 
-1303,Yes,.,,,"telepathy.freedesktop.org, Collabora Limited",Libtelepathy. Open Source Library,Sharma Shrikumar.B (Nokia-D-MSW/Bangalore),this is a framework for XMPP protocol. 
-1304,No,.,,,"freedesktop.org, open source component",gstreamer,Adkoli Prashant (Nokia-D-MSW/Bangalore); Patel Kirit (Nokia-D-MSW/Dallas),"3rd party component, open source code.. No Licensee Fee impact"
-1400,Yes,.,,,Symbian Software Ltd,Symbian tools - A set of RnD Tools done by Symbian which can be used in S60 platform.,Kauraniemi Pasi (Nokia-D-MSW/Tampere); Laitinen Matti.T (Nokia-D-MSW/Helsinki),Nokia has done a contract with Symbian for distributing the Symbian LTC debug tools in S60 releases.
-842593,No,.,,,GameLion,Global Race - It is 3D racing game developed by GameLion,Pulkkinen Kimmo (Nokia-D-MSW/Oulu)," - Located in \ppd_sw\cusw_oul_domain\Game_GlobalRace, Nokia has bought a license for Tube + variants, the component cannot be delivered to licensees."
+0,Yes,Nokia,,,Company1,Open,,
+1,No,Nokia,,,Company1,Private,,
+3,Yes,Public,Yes,No,Company1,XXX,,
+7,Yes,Public,No,Yes,Company1,YYY,,
--- a/buildframework/helium/tests/data/distribution.policy.id_status.csv	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tests/data/distribution.policy.id_status.csv	Wed Jun 23 16:36:23 2010 +0300
@@ -1,115 +1,5 @@
 ID,Include in build?,Description,Contract status,Supplier
-0,Yes,Series 60 Platform,Delivered,Nokia
-1,No,Nokia internal sw,Not delivered,Nokia
-10,Yes,eMuzed AMR NB encoder,Delivered,3rd party
-11,Yes,eMuzed AMR NB decoder,Delivered,3rd party
-12,Yes,eMuzed AMR WB encoder,Delivered,3rd party
-13,Yes,eMuzed AMR WB decoder,Delivered,3rd party
-21,Yes,"MobileBAE v2.1 audio engine from Beatnik, Inc.",Binary only,3rd party
-30,Yes,eMuzed MP3 decoder,Delivered,3rd party
-40,Yes,eMuzed MPEG-4 AAC decoder,Delivered,3rd party
-41,Yes,eMuzed eAAC+ decoder ,Delivered,3rd party
-42,Yes,eMuzed MPEG-4 AAC encoder,Delivered,3rd party
-50,Yes,eMuzed H.263 encoder,Delivered,3rd party
-51,Bin,Emuzed MDF H263/MPEG4 Decoder,Binary only,3rd party
-52,Yes,Emuzed MDF Video Postprocessor,Delivered,3rd party
-53,Bin,NRC MDF H264 (AVC) Decoder,Binary only,Nokia
-54,No,Helix MDF RealVideo-8/9 Decoder,Not delivered,3rd party
-55,No,Helix CMMFCodec RealAudio-8 Decoder,Not delivered,3rd party
-56,No,Helix CMMFCodec RealAudio-Voice Decoder,Not delivered,3rd party
-57,Yes,Emuzed h.264/AVC ARM11 video encoder,Binary only,3rd party
-60,Yes,Circuit switched Video Telephony Solution (3G-324M) from PacketVideo Corporation ,Binary only,3rd party
-80,Yes,RealOnePlayerEngine,Delivered,3rd party
-81,Bin,"Helix DNA engine sources, restricted protocol and codex from RealNetworks, Inc. ",Binary only,3rd party
-82,Yes,"Helix DNA engine binaries, restricted protocol and codex from RealNetworks, Inc. ",Delivered,3rd party
-100,Yes,Java JSR-135,Delivered,3rd party
-101,Yes,Java JSR-75,Delivered,Nokia
-102,Yes,Java J2ME,Delivered,3rd party
-103,Yes,KVM virtual machine,Delivered,3rd party
-104,Yes,Monty virtual machine,Delivered,3rd party
-105,Yes,Software implementation of J2ME Web Services Specification (JSR-172),Delivered,3rd party
-106,Yes,Software implementation of Security and Trust Services API for J2ME (JSR-177),Delivered,3rd party
-107,No,Java VSCL implementation,Not delivered,3rd party
-108,No,Java for iMode,Not delivered,3rd party
-109,No,Nokia proprietary Java API supplements,Not delivered,Nokia
-110,Yes,Tegic T9 WINS binaries,Delivered,3rd party
-111,No,"THUMB of T9 from Tegic Communications, Inc.",Not delivered,3rd party
-115,Yes,Matsutake Predictive Text Input Engine Binaries,Delivered,3rd party
-130,No,Chinese bitmap fonts from Chinese Electronics Standardization Technical Institute.,Not delivered,3rd party
-131,Yes,Ricoh Japan fonts,Binary only,3rd party
-132,Yes,Agfa Thai fonts,Binary only,3rd party
-133,Yes,"Vector fonts & rendering engine from Monotype Imaging (Agfa) including WGL4, Arabic, Hebrew, Thai, Japanese, Chinese",Binary only,3rd party
-140,Yes,SJTU Sunway Chinese-English dictionary,Delivered,3rd party
-151,Yes,Entrust root certificates,Delivered,3rd party
-152,Yes,Verisign root certificates,Delivered,3rd party
-153,Yes,Symbian root certificates,Delivered,3rd party
-157,Yes,Root Certificates from BeTrusted Ltd.,Delivered,3rd party
-158,Yes,Equifax root certificate,Delivered,3rd party
-180,Yes,"Vector fonts & rendering engine from Monotype Imaging (Agfa) including WGL4, Arabic, Hebrew, Thai, Japanese, Chinese",Binary only,3rd party
-200,Yes,Netscape Plugin API,Delivered,3rd party
-210,No,Macromedia Flash,Not delivered,3rd party
-220,No,"SD memory card specifications from 3C, LLC and related Nokia proprietary implementation",Not delivered,3rd party
-230,Yes,Arabica & Xerces C++ XML parser (OSS),Delivered,3rd party
-240,Yes,KJS Scripting Engine (OSS),Delivered,3rd party
-241,Yes,Javascriptcore ,Delivered,3rd party
-242,Yes,Webcore ,Delivered,3rd party
-250,Yes,libxml2,Delivered,3rd party
-260,No,Vodafone  pictographs,Not delivered,3rd party
-261,No,DoCoMo  pictographs,Not delivered,3rd party
-280,No,CXX Specifications (related to WLAN) from Cisco,Not delivered,3rd party
-290,Yes,3GP_EXT_Parser,Delivered,3rd party
-300,Yes,FileBrowse 3.0 from Nokia,Binary only,Nokia
-310,No,OCR Technology including OCR engine and OCR language packages from Hanwang,Not delivered,3rd party
-500,No,Vodafone Branding content,Not delivered,Nokia
-510,No,Docomo Complement Package,Not delivered,Nokia
-520,No,Vodafone Complement Package 1,Not delivered,Nokia
-600,No,Rosetta I-mode,Not delivered,Nokia
-1000,No,PC Suite,Not delivered,Nokia
-1010,No,Nokia PoC Client,Not delivered,Nokia
-1020,Yes,ThemeStudio,Binary only,Nokia
-1030,No,Nokia VPN Client,Not delivered,Nokia
-1040,No,Catalogs (Preminet Client),Not delivered,Nokia
-1050,No,PDF Reader from Adobe Corporation,Not delivered,3rd party
-1060,No,MS Office viewers/editors in 3.0,Not delivered,3rd party
-1070,No,FlashLite 1.1 binaries (bin in 2.8&3.0),Not delivered,3rd party
-1075,No,FlashLite 2.0 sources,Not delivered,3rd party
-1076,No,FlashLite 2.0 binaries,Not delivered,3rd party
-1080,No,Zip Manager from Paragon Technologie Gmbh,Not delivered,3rd party
-1090,No,Quick Office,Not delivered,3rd party
-1120,Yes,eMuzed WMA decoder,Binary only,3rd party
-1140,No,Windows Media DRM from Microsoft,Not delivered,3rd party
-1160,No,vCurrentMobile Delta Generator and Installer from Red Bend,Not delivered,3rd party
-1170,No,Mobile Security from Symantec,Not delivered,3rd party
-700,No,WMDRM,Not delivered,3rd party
-1180,No,"UI effects, phase 1",Not delivered,Nokia
-159,Yes,Valicert Class2 CA,Delivered,3rd party
-800,Yes,Java WECE External j9,Delivered,3rd party
-810,Yes,Java WEME Internal j9,Delivered,3rd party
-281,Bin,Cisco Compatible eXtensions (CCX) for WLAN devices binaries,Binary only,3rd party
-900,No,Decuma/HWR from Zi Corporation,Not delivered,3rd party
-530,No,CMCC Complement Package,Not delivered,3rd party
-1190,Yes,WLAN ASD Client from Wi-Fi Alliance (WFA),Delivered,3rd party
-171,Yes,Java eSWT,Delivered,3rd party
-540,No,Vodafone Complement Package 2,Not delivered,NA
-550,No,Orange Complement Package 2,Not delivered,NA
-560,No,T-mobile Complement Package 2,Not delivered,NA
-172,No,JSR-238 Mobile Internationalization API,Not delivered,3rd party
-161,Yes,CyberTrust,Delivered,3rd party
-650,Bin,CASN RTS ,Not delivered,NA
-1200,No,AudioProxyServer  release ,Not delivered,NA
-610,No,3.2 ED VoIP and CCE components ,Not delivered,Nokia
-525,No,Vodafone Complement Package 1.1,Not delivered,3rd party
-570,No,AT & T Complement Package,Not delivered,3rd party
-620,Yes,"CCE REQ components: cce, spsettings cch",Delivered,Nokia
-400,No,Components implementing Japanese hadwriting recognition and virtual keyboard.,Not delivered,3rd party
-162,Yes,Starfield,Delivered,3rd party  
-163,Yes,GoDaddy,Delivered,3rd party  
-950,No,SP API Test Automation,Not delivered,Nokia
-1201,No,WMA 10 Professional audio codec,Not delivered,3rd party
-1130,Yes,MTP Protocol,Delivered,Nokia
-116,No,Xt9TegicDelivery,Not delivered,3rd party
-117,No,ZiDelivery,Not delivered,3rd party
-350,No,PtiEngine core which wraps HandWriting Recognition engine from Vision Object company,Not delivered,3rd party
-1078,No,Flashlite 3.0 sources,Not delivered,3rd party
-1079,No,Flashlite 3.0 binaries,Not delivered,3rd party
+0,Yes,Public,Delivered,Company1
+1,No,Internal,Not delivered,Company1
+2,Yes,Some app,,Company2
 ,,,, 
--- a/buildframework/helium/tools/common/python/lib/ats3/ats4_template.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/python/lib/ats3/ats4_template.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -218,7 +218,7 @@
             <task>
                 <type>FileDownloadTask</type>
                 <parameters>
-                    <parameter value="{{ atsself.getlogdir(setd) }}\*" name="dir"/>
+                    <parameter value="{{ atsself.getlogdir(setd) }}\*" name="src"/>
                 </parameters>
             </task>
         {% include 'poststep_custom.xml' ignore missing %}
--- a/buildframework/helium/tools/common/python/lib/ats3/testconfigurator.py	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/python/lib/ats3/testconfigurator.py	Wed Jun 23 16:36:23 2010 +0300
@@ -304,9 +304,13 @@
         orig_dir = os.getcwd()
         try:
             os.chdir(self.tsrc_bld_dir)
-            os.system("bldmake bldfiles")
             #os.system("abld test build %s" % self.target_platform)
-            process = subprocess.Popen("abld -w test build %s" % self.target_platform, shell=True, stdout=subprocess.PIPE)
+            
+            if os.environ.has_key("SBS_HOME"):
+                process = subprocess.Popen("sbs --what -c %s.test" % self.target_platform.replace(' ', '_'), shell=True, stdout=subprocess.PIPE)
+            else:
+                os.system("bldmake bldfiles")
+                process = subprocess.Popen("abld -w test build %s" % self.target_platform, shell=True, stdout=subprocess.PIPE)
             pipe = process.communicate()[0]
             for line in pipe.split('\n'):
                 _logger.debug(line.strip())
--- a/buildframework/helium/tools/common/python/lib/build/model.py	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/python/lib/build/model.py	Wed Jun 23 16:36:23 2010 +0300
@@ -654,7 +654,7 @@
                 s60_year = u'0'
                 s60_week = u'0'
                 if s60_version == None:
-                    res = re.match(r'.*\.(.*)_(\d{4})(\d{2})_(.*)', release)
+                    res = re.match(r'(.*)_(\d{4})(\d{2})_(.*)', release)
                     if res != None:
                         s60_release = res.group(1) + '_' + res.group(4)
                         s60_year = res.group(2)
--- a/buildframework/helium/tools/common/python/lib/ccm/__init__.py	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/python/lib/ccm/__init__.py	Wed Jun 23 16:36:23 2010 +0300
@@ -724,7 +724,7 @@
             raise Exception("Error creating a session: result:\n%s" % result)
         session_addr = result.strip()
         _logger.debug(session_addr)
-        if not re.match(r'\w+:\d+:\d+.\d+.\d+.\d+(:\d+.\d+.\d+.\d+)?', session_addr):
+        if not re.match(r'[a-zA-Z0-9_-]+:\d+:\d+\.\d+\.\d+\.\d+(:\d+\.\d+\.\d+\.\d+)?', session_addr):
             raise Exception("Error creating a session: result:\n%s" % result)
         return Session(username, engine, dbpath, session_addr)        
             
--- a/buildframework/helium/tools/common/python/lib/cpythontest/test_ats3.py	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/python/lib/cpythontest/test_ats3.py	Wed Jun 23 16:36:23 2010 +0300
@@ -705,7 +705,10 @@
         process.communicate()
         self.mocker.result(["lib1.dll\npath/to/another/library.dll\nsome/other/file.txt\nlib2.dll\nlib3.dll\n"])
         obj = self.mocker.replace("subprocess.Popen")
-        obj("abld -w test build target platform", shell=True, stdout=subprocess.PIPE)
+        if os.environ.has_key("SBS_HOME"):
+            obj("sbs --what -c target_platform.test", shell=True, stdout=subprocess.PIPE)
+        else:
+            obj("abld -w test build target platform", shell=True, stdout=subprocess.PIPE)
         self.mocker.result(process)
         
         exists = self.mocker.replace("os.path.exists")
--- a/buildframework/helium/tools/common/python/lib/cpythontest/test_ats4.py	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/python/lib/cpythontest/test_ats4.py	Wed Jun 23 16:36:23 2010 +0300
@@ -668,7 +668,10 @@
         process.communicate()
         self.mocker.result(["lib1.dll\npath/to/another/library.dll\nsome/other/file.txt\nlib2.dll\nlib3.dll\n"])
         obj = self.mocker.replace("subprocess.Popen")
-        obj("abld -w test build target platform", shell=True, stdout=subprocess.PIPE)
+        if os.environ.has_key("SBS_HOME"):
+            obj("sbs --what -c target_platform.test", shell=True, stdout=subprocess.PIPE)
+        else:
+            obj("abld -w test build target platform", shell=True, stdout=subprocess.PIPE)
         self.mocker.result(process)
         
         exists = self.mocker.replace("os.path.exists")
--- a/buildframework/helium/tools/common/python/lib/ido.py	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/python/lib/ido.py	Wed Jun 23 16:36:23 2010 +0300
@@ -42,10 +42,11 @@
 
 def get_first_day_of_cycle(now = datetime.datetime.now()):
     """ This function returns a datetime object representing the monday from closest
-        even week.
+        odd week.
     """
-    week = int(now.strftime("%W"))
-    day = int(now.strftime("%w")) - 1
+    isoyear, isoweek, isoday = now.isocalendar()
+    week = isoweek - 1
+    day = isoday - 1
     monday = now - datetime.timedelta(days=day + week.__mod__(2) * 7)
     monday = monday.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
     return monday
--- a/buildframework/helium/tools/common/python/lib/idoprep.py	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/python/lib/idoprep.py	Wed Jun 23 16:36:23 2010 +0300
@@ -141,7 +141,7 @@
                     outputquality.write("%s=%s\n" % (sysdef, component))
                 else:
                     for dir in adoqualitydirs.split(','):
-                        if os.path.normpath(dir) == os.path.normpath(os.path.join(builddrive), os.environ['EPOCROOT'], location):
+                        if os.path.normpath(dir) == os.path.normpath(os.path.join(builddrive, os.environ['EPOCROOT'], location)):
                             outputquality.write("%s=%s\n" % (sysdef, component))
     outputquality.close()
     output.close()
--- a/buildframework/helium/tools/common/python/scripts/sbsscanlogmetadata.py	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/python/scripts/sbsscanlogmetadata.py	Wed Jun 23 16:36:23 2010 +0300
@@ -68,6 +68,9 @@
             self.compiled_stream_object[stream] = []
             self.streams[stream] = open(self.stream_path[stream], "w")
             self.streamStatus[stream] = False
+            self.streams[stream].write(\
+"""<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="" xmlns="http://symbian.com/xml/build/log" xmlns:progress="http://symbian.com/xml/build/log/progress" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build/log http://symbian.com/xml/build/log/1_0.xsd">""")
             for  searchString in STREAM_REGEX[stream]:
                 self.compiled_stream_object[stream].append(re.compile(searchString))
         return True
@@ -85,8 +88,6 @@
             if textLine.startswith("<?xml ") or textLine.startswith("<buildlog ") \
                 or textLine.startswith("</buildlog"):
                 self.loggerout.write(textLine)
-                for stream in stream_list:
-                    self.streams[stream].write(textLine)
                 continue
             if(self.ignoreTextCompileObject.search(textLine)):
                 continue
@@ -99,6 +100,9 @@
                     break
     
                 if(self.streamStatus[stream]):
+                    if textLine.startswith("<?xml ") or textLine.startswith("<buildlog ") \
+                        or textLine.startswith("</buildlog"):
+                        continue
                     self.streams[stream].write(textLine)
                     break
 
@@ -116,6 +120,7 @@
         try:
             self.loggerout.close()
             for stream in self.streams.keys():
+                self.streams[stream].write('</buildlog>')
                 self.streams[stream].close()
             return True
         except:
--- a/buildframework/helium/tools/common/templates/ido/ido-robot-zip.ant.xml.ftl	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/templates/ido/ido-robot-zip.ant.xml.ftl	Wed Jun 23 16:36:23 2010 +0300
@@ -28,14 +28,14 @@
                 <#list ant['do.robot.release']?split(',') as project>
                     <#if name?replace('\\', '/')?lower_case?contains("/${project}/${project}"?lower_case)>
                     <#-- 7za u test.7z  output/analysisdata/ -->
-                    <exec executable="7za" dir="${data[name]}/../">
+                    <exec executable="7za" dir="${name}/../">
                         <arg value="u"/>
                         <arg value="-xr!*/internal/*"/>
                         <arg value="-xr!*/doc/*"/>
                         <arg value="-xr!_ccmwaid.inf"/>
                         <arg value="-xr!abld.bat"/>
                         <arg value="${ant['build.output.dir']}/s60Sources.7z"/>
-                        <arg value="${data[name]?split("/")?last}/"/>
+                        <arg value="${name?split("/")?last}/"/>
                     </exec>                    
                     </#if>
                 </#list>
--- a/buildframework/helium/tools/common/templates/log/scan2.html.ftl	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/templates/log/scan2.html.ftl	Wed Jun 23 16:36:23 2010 +0300
@@ -44,7 +44,7 @@
 
 <td align="center">${hours?string("00")}:${minutes?string("00")}:${seconds?string("00")}</td>
 <#list priority_ids as priority>
-    <#assign count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority      where priority like \'${priority}\') and logpath_id in (select id from logfiles where path like \'%${logfile}%\') and component_id = \'${component}\' '][0]['COUNT'] >
+    <#assign count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority      where priority like \'${priority}\') and logpath_id in (select id from logfiles where path like \'%${logfile}\') and component_id = \'${component}\' '][0]['COUNT'] >
     <#if count &gt; 0>
         <#assign color = color_list['${priority}']>
         <td align="center" bgcolor="${color}"><a href="#section${href_c_id}${href_id}">${count}</a></td>
@@ -57,7 +57,7 @@
 </#macro>
 
 <#macro print_list_text priority component href_id>
-<#assign count = table_info['select count(data) as COUNT from metadata where component_id=\'${component}\' and priority_id in (select id from priority where priority like \'${priority}\') and logpath_id in (select id from logfiles where path like \'%${logfile}%\')'][0]['COUNT'] >
+<#assign count = table_info['select count(data) as COUNT from metadata where component_id=\'${component}\' and priority_id in (select id from priority where priority like \'${priority}\') and logpath_id in (select id from logfiles where path like \'%${logfile}\')'][0]['COUNT'] >
 <#if count &gt; 0>
 <#if component_table?keys?seq_contains("${component}")>
     <#if component_table["${component}"] != "general">
@@ -90,8 +90,8 @@
     <#assign table_info = pp.loadData('com.nokia.helium.metadata.SQLFMPPLoader',
         "${dbPath}") >
 <#-- overall summary -->
-<#assign component_table = table_info['select id, component from component where logpath_id in (select id from logfiles where path like \'%${logfile}%\') ORDER BY component'] >
-<#assign general_id = table_info['select id from component where logpath_id in (select id from logfiles where path like \'%${logfile}%\') and component like \'%general%\''] >
+<#assign component_table = table_info['select id, component from component where logpath_id in (select id from logfiles where path like \'%${logfile}\') ORDER BY component'] >
+<#assign general_id = table_info['select id from component where logpath_id in (select id from logfiles where path like \'%${logfile}\') and component like \'%general%\''] >
 
 <html>
 <head><title>${logfile}</title></head>
@@ -114,7 +114,7 @@
 <#assign priority_ids = color_list?keys>
 <#list priority_ids as priority>
     <@add_severity_count severity='${priority}' 
-        count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority where priority like \'${priority}\') and logpath_id in (select id from logfiles where path like \'%${logfile}%\')'][0]['COUNT'] color=color_list['${priority}'] />
+        count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority where priority like \'${priority}\') and logpath_id in (select id from logfiles where path like \'%${logfile}\')'][0]['COUNT'] color=color_list['${priority}'] />
 </#list>
 </tr>
 </table>
@@ -136,6 +136,7 @@
 <#assign c_id = 0>
 <#if general_id?size &gt; 0>
 <@print_component_summary component="${general_id[0][\"id\"]}" href_c_id="${c_id}"/>
+<#assign c_id = c_id + 1>
 </#if>
 
 <#assign component_ids = component_table?keys>
@@ -152,7 +153,7 @@
 
 <#assign href_pid = 0>
 <#list priority_ids as p_id>
-<#assign p_count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority where priority like \'${p_id}\') and logpath_id in (select id from logfiles where path like \'%${logfile}%\')'][0]['COUNT'] >
+<#assign p_count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority where priority like \'${p_id}\') and logpath_id in (select id from logfiles where path like \'%${logfile}\')'][0]['COUNT'] >
 <#if p_count &gt; 0>
     <h3><a>${p_id} Details By Component</a></h3>
 </#if>
@@ -165,8 +166,8 @@
 <#list component_ids as component>
     <#if component_table["${component}"] != "general">
         <@print_list_text priority="${p_id}" component="${component}" href_id="${href_cid}${href_pid}" />
-        <#assign href_cid = href_cid + 1>
     </#if>
+    <#assign href_cid = href_cid + 1>
 </#list>
 <#assign href_pid = href_pid + 1>
 </#list>
--- a/buildframework/helium/tools/common/templates/log/scan2_text.html.ftl	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/templates/log/scan2_text.html.ftl	Wed Jun 23 16:36:23 2010 +0300
@@ -44,7 +44,7 @@
 
 <td align="center">${hours?string("00")}:${minutes?string("00")}:${seconds?string("00")}</td>
 <#list priority_ids as priority>
-    <#assign count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority      where priority like \'${priority}\') and logpath_id in (select id from logfiles where path like \'%${logfile}%\') and component_id = \'${component}\' '][0]['COUNT'] >
+    <#assign count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority      where priority like \'${priority}\') and logpath_id in (select id from logfiles where path like \'%${logfile}\') and component_id = \'${component}\' '][0]['COUNT'] >
     <#if count &gt; 0>
         <#assign color = color_list['${priority}']>
         <td align="center" bgcolor="${color}"><a href="#section${href_c_id}${href_id}">${count}</a></td>
@@ -57,7 +57,7 @@
 </#macro>
 
 <#macro print_list_text priority component href_id>
-<#assign count = table_info['select count(data) as COUNT from metadata where component_id=\'${component}\' and priority_id in (select id from priority where priority like \'${priority}\') and logpath_id in (select id from logfiles where path like \'%${logfile}%\')'][0]['COUNT'] >
+<#assign count = table_info['select count(data) as COUNT from metadata where component_id=\'${component}\' and priority_id in (select id from priority where priority like \'${priority}\') and logpath_id in (select id from logfiles where path like \'%${logfile}\')'][0]['COUNT'] >
 <#if count &gt; 0>
 <#if component_table?keys?seq_contains("${component}")>
     <#if component_table["${component}"] != "general">
@@ -94,8 +94,8 @@
     <#assign table_info = pp.loadData('com.nokia.helium.metadata.SQLFMPPLoader',
         "${dbPath}") >
 <#-- overall summary -->
-<#assign component_table = table_info['select id, component from component where logpath_id in (select id from logfiles where path like \'%${logfile}%\') ORDER BY component'] >
-<#assign general_id = table_info['select id from component where logpath_id in (select id from logfiles where path like \'%${logfile}%\') and component like \'%general%\''] >
+<#assign component_table = table_info['select id, component from component where logpath_id in (select id from logfiles where path like \'%${logfile}\') ORDER BY component'] >
+<#assign general_id = table_info['select id from component where logpath_id in (select id from logfiles where path like \'%${logfile}\') and component like \'%general%\''] >
 
 <html>
 <head><title>${logfile}</title></head>
@@ -119,7 +119,7 @@
 <#assign priority_ids = color_list?keys>
 <#list priority_ids as priority>
     <@add_severity_count severity='${priority}' 
-        count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority where priority like \'${priority}\') and logpath_id in (select id from logfiles where path like \'%${logfile}%\')'][0]['COUNT'] color=color_list['${priority}'] />
+        count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority where priority like \'${priority}\') and logpath_id in (select id from logfiles where path like \'%${logfile}\')'][0]['COUNT'] color=color_list['${priority}'] />
 </#list>
 </tr>
 </table>
@@ -158,7 +158,7 @@
 
 <#assign href_pid = 0>
 <#list priority_ids as p_id>
-<#assign p_count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority where priority like \'${p_id}\') and logpath_id in (select id from logfiles where path like \'%${logfile}%\')'][0]['COUNT'] >
+<#assign p_count = table_info['select count(data) as COUNT from metadata where priority_id in (select id from priority where priority like \'${p_id}\') and logpath_id in (select id from logfiles where path like \'%${logfile}\')'][0]['COUNT'] >
 <#if p_count &gt; 0>
     <h3><a>${p_id} Details By Component</a></h3>
 </#if>
--- a/buildframework/helium/tools/common/test/test_common.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/common/test/test_common.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -263,12 +263,14 @@
     
     
     <target name="test-tempRecordMacro">
-        <delete file="${build.cache.log.dir}/test.log" failonerror="false"/>
-        <delete file="${build.cache.log.dir}/test.log.xml" failonerror="false"/>
-        <delete file="${build.cache.log.dir}/test.sqlite" failonerror="false"/>
-        <delete file="${metadata.dbfile}" failonerror="false"/>
-        <var name="build.log.dir" value="${build.cache.dir}/helium/temp_drive/output/logs" unset="true"/>
-        <var name="test.log.dir" value="${build.cache.dir}/helium/temp_drive/output/logs/test" unset="true"/>        
+        <au:plainlistener logLevel="verbose"/>
+        <delete file="${build.cache.log.dir}/test.log" failonerror="true"/>
+        <delete file="${build.cache.log.dir}/test.log.xml" failonerror="true"/>
+        <delete file="${build.cache.log.dir}/test.sqlite" failonerror="true"/>
+        <delete file="${build.cache.log.dir}/signals/test.log.status.xml" failonerror="true"/>
+        <delete file="${metadata.dbfile}" failonerror="true"/>
+        <var name="build.log.dir" value="${build.cache.dir}/helium/temp_drive/output/logs"/>
+        <var name="test.log.dir" value="${build.cache.dir}/helium/temp_drive/output/logs/test" />        
         <hlm:tempRecordStartMacro name="test.log" />
         <echo>ERROR: an error</echo>
         <echo>WARNING: a warning</echo>
--- a/buildframework/helium/tools/compile/compile.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/compile/compile.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -94,8 +94,15 @@
                         <scriptmapper language="jython">
 <![CDATA[
 import os
+counter = project.getProperty(".unique.counter");
+if not counter:
+    counter = 0
+else:
+    counter = int(counter)
+counter = counter + 1
+project.setProperty(".unique.counter", str(counter));
 (drive, _) = os.path.splitdrive(r'@{file}')
-path = r'@{file}'.replace(drive + os.sep, "", 1)
+path = r'@{file}'.replace(drive + os.sep, "%08d%s" % ((counter-1), os.sep), 1)
 self.addMappedName(path)
 ]]>
                         </scriptmapper>
--- a/buildframework/helium/tools/compile/compile.antlib.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/compile/compile.antlib.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -65,6 +65,8 @@
         <attribute name="error.limit"/>
         <attribute name="phase" default="compile"/>
         <sequential>
+            <var name="build.errors.total" unset="true" />
+            <var name="compile.result" unset="true" />
             <hlm:metadataCountSeverity severity="ERROR" log="@{compile.summary.file}" 
                 db="${metadata.dbfile}" 
                 property="build.errors.total"/>
@@ -151,6 +153,8 @@
         <attribute name="output"/>
         <attribute name="logfile"/>
         <sequential>
+            <basename property="base.merge.log" file="@{logfile}"/>
+            <hlm:tempRecordStartMacro name="${base.merge.log}"/>
             <echo message="input:@{input}" />
             <echo message="output:@{output}" />
             <mkdir dir="${compile.log.dir}"/>
@@ -158,7 +162,7 @@
             <copy todir="${build.drive}/" verbose="true">
                 <fileset dir="${helium.dir}/tools/common/dtd" includes="*.dtd"/>
             </copy>
-            <preset.exec executable="perl" dir="${build.drive}/" failonerror="${failonerror}" output="@{logfile}">
+            <preset.exec executable="perl" dir="${build.drive}/" failonerror="${failonerror}">
                 <arg value="${epocroot}epoc32/tools/build/genxml.pl"/>
                 <arg value="-s"/>
                 <arg value="${epocroot}"/>
@@ -166,35 +170,11 @@
                 <arg value="@{output}"/>              
                 <arg line="@{input}"/>
             </preset.exec>
-            <if>
-                <not>
-                    <available file="@{output}"/>
-                </not>
-                <then>
-                    <echo file="@{logfile}" message="ERROR: Check @{input}" append="true"/>
-                    <!-- Todo: metadata: Make sure that logfilter is added to the filterset -->
-                    <hlm:metadatarecord database="${metadata.dbfile}">
-                        <hlm:textmetadatainput>
-                            <fileset casesensitive="false" file="@{logfile}" />
-                            <metadatafilterset refid="filterset.genxml.merge" />
-                        </hlm:textmetadatainput>
-                    </hlm:metadatarecord>
-                    <hlm:generateBuildStatus file="${build.id}.sysdef_GenxmlMerge.log" />
-                    <hlm:signal name="canonicalSysDefFailSignal" result="1" >
-                        <signalNotifierInput>
-                            <signalInput refid="canonicalSysDefFailSignalInput" >
-                                <notifierInput>
-                                    <fileset dir="${build.log.dir}" >
-                                        <include name="**/${build.id}.sysdef_GenxmlMerge.log*" />
-                                    </fileset>
-                                </notifierInput>
-                            </signalInput>
-                        </signalNotifierInput>
-                    </hlm:signal>
-                </then>
-            </if>
-
-            <hlm:assertFileExists file="@{output}"/>
+            <hlm:tempRecordStopMacro name="${base.merge.log}" phase="compile" filterref="filterset.genxml.merge"/>
+            <hlm:signalMacro
+                logfile="${build.cache.log.dir}/${base.merge.log}"
+                phase="compile" 
+                signal.input="canonicalSysDefFailSignalInput" />
         </sequential>
     </macrodef>
 
--- a/buildframework/helium/tools/compile/qt/templates/run-qmake.ant.xml.ftl	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/compile/qt/templates/run-qmake.ant.xml.ftl	Wed Jun 23 16:36:23 2010 +0300
@@ -34,6 +34,8 @@
                             <arg value="/C"/>
                             <arg value="qmake"/>
                             <arg value="-listgen"/>
+                            <#if "${ant['build.system']?lower_case}" = 'sbs'> 
+                            <arg line = "-spec symbian-sbsv2" /></#if>
                             <#if unit.@qmakeArgs[0]??>
                             <arg line="${unit.@qmakeArgs?xml}"/>
                             <#else>
--- a/buildframework/helium/tools/compile/qt/templates/run-qmake.mk.ftl	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/compile/qt/templates/run-qmake.mk.ftl	Wed Jun 23 16:36:23 2010 +0300
@@ -28,8 +28,8 @@
 <#list data["//unit/@proFile/.."] as unit>
 ##########################################################################
 /${unit.@bldFile}/bld.inf: /${unit.@bldFile}/${unit.@proFile}
-	@echo cd /${unit.@bldFile} ^&^& qmake -listgen <#if unit.@qmakeArgs[0]??>${unit.@qmakeArgs}<#else>${ant['qt.qmake.default.args']}</#if> ${unit.@proFile}
-	cd /${unit.@bldFile} && qmake -listgen <#if unit.@qmakeArgs[0]??>${unit.@qmakeArgs}<#else>${ant['qt.qmake.default.args']}</#if> ${unit.@proFile}
+	@echo cd /${unit.@bldFile} ^&^& qmake -listgen <#if unit.@qmakeArgs[0]??>${unit.@qmakeArgs}<#else>${ant['qt.qmake.default.args']}</#if> <#if "${ant['build.system']?lower_case}" = 'sbs-ec'> -spec symbian-sbsv2 </#if> ${unit.@proFile}
+	-@cd /${unit.@bldFile} && qmake -listgen <#if unit.@qmakeArgs[0]??>${unit.@qmakeArgs}<#else>${ant['qt.qmake.default.args']}</#if> <#if "${ant['build.system']?lower_case}" = 'sbs-ec'> -spec symbian-sbsv2 </#if> ${unit.@proFile}
 
 all:: /${unit.@bldFile}/bld.inf
 
--- a/buildframework/helium/tools/compile/sbs/sbs.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/compile/sbs/sbs.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -116,11 +116,23 @@
                         <hlm:sbstask sbsinput="@{sbs.input}" sysdefFile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml" 
                             layerPatternSetRef="${sbs.patternset}" errorOutput="${sbs.log.file}.sbs_error.log" 
                             workingDir="${build.drive}/" failOnError="false" outputLog="${sbs.log.file}" cleanLog = "${sbs.clean.log}"
-                             statsLog="${compile.log.dir}/${build.id}_${sysdef.configuration}.info.xml" />
-                        <!-- run arm license checking / setting arm version only for arm config --> 
+                             statsLog="${sbs.log.file}.info.xml" />
+
+                        <!-- Check build for missing files -->
+                        <exec osfamily="windows" executable="cmd" dir="${build.drive}/" input="${sbs.log.file}" output="${sbs.log.file}.check.log" failonerror="false">
+                            <arg value="/c" />
+                            <arg value="sbs_filter.bat" />
+                            <arg value="--filters=FilterCheckComp" />
+                        </exec>
+                        <exec osfamily="unix" executable="sbs_filter" dir="${build.drive}/" input="${sbs.log.file}" output="${sbs.log.file}.check.log" failonerror="false">
+                            <arg value="--filters=FilterCheckComp" />
+                        </exec>
+                        <hlm:assertFileExists file="${sbs.log.file}.check.log" />
+                        
+                        <!-- Push info to the database and generate scanlog. --> 
                         <echo message="sbs.log.file: ${sbs.log.file}" />
                         <hlm:sbsProcessOutputMacro sbs.log.file="${sbs.log.file}"
-                            sbs.clean.log.file="${sbs.clean.log}"  sbs.stats.file="${compile.log.dir}/${build.id}_${sysdef.configuration}.info.xml"
+                            sbs.clean.log.file="${sbs.clean.log}"  sbs.stats.file="${sbs.log.file}.info.xml"
                             sbs.ant.output.file="${sbs.log.file}" sbs.error.output.file="${sbs.log.file}.sbs_error.log"/>
                     </sequential>
                 </for>
@@ -131,7 +143,8 @@
             </then>
         </if>
     </target>
-
+    
+    
     <macrodef name="sbsProcessOutputMacro" uri="http://www.nokia.com/helium">
         <attribute name="sbs.clean.log.file" />
         <attribute name="sbs.log.file" />
@@ -140,7 +153,29 @@
         <attribute name="sbs.ant.output.file" />
         <sequential>
             <var name="sbs.scan2.template" value="scan2.html.ftl" />
+            <var name="base.sbs.log" value="" unset="true"/>
             <basename property="base.sbs.log" file="@{sbs.log.file}" suffix=".log"/>
+            <echo message="base.sbs.log: ${base.sbs.log}" />
+            
+            <!-- Push check log into the database -->
+            <hlm:metadatarecord database="${metadata.dbfile}">
+                <hlm:textmetadatainput>
+                    <fileset casesensitive="false" file="@{sbs.log.file}.check.log"/>
+                    <metadatafilterset refid="filterset.sbs" />
+                </hlm:textmetadatainput>
+            </hlm:metadatarecord>
+            <delete file="${build.log.dir}/${base.sbs.log}.check.scan2.html" failonerror="false" />
+            <exec executable="perl" dir="${build.drive}/" failonerror="false">
+                <arg value="${build.drive}/epoc32/tools/htmlscanlog.pl" />
+                <arg value="-v" />
+                <arg value="-v" />
+                <arg value="-l" />
+                <arg file="@{sbs.log.file}.check.log" />
+                <arg value="-o" />
+                <arg file="${build.log.dir}/${base.sbs.log}.check.scan2.html" />
+            </exec>
+            <hlm:assertFileExists file="${build.log.dir}/${base.sbs.log}.check.scan2.html" />
+            
             <hlm:metadatarecord database="${metadata.dbfile}">
                 <hlm:textmetadatainput>
                     <fileset casesensitive="false" file="@{sbs.error.output.file}"/>
@@ -168,12 +203,13 @@
                         <istrue value="${skip.sbs.parser.exception}" />
                         <then>
                             <var name="sbs.scan2.template" value="scan2_text.html.ftl" />
-                            <hlm:metadatadelete database="${metadata-read-db}">
+                            <hlm:metadatadelete database="${metadata.dbfile}">
                                 <fileset casesensitive="false" file="@{sbs.log.file}"/>
                             </hlm:metadatadelete>
-                            <hlm:metadatarecord database="${metadata-read-db}" >
+                            <hlm:metadatarecord database="${metadata.dbfile}" >
                                 <hlm:textmetadatainput>
                                     <fileset casesensitive="false" file="@{sbs.log.file}"/>
+                                    <metadatafilterset refid="filterset.sbs" />
                                 </hlm:textmetadatainput>
                             </hlm:metadatarecord>
                         </then>
@@ -184,7 +220,7 @@
                 </catch>
             </trycatch>
             <fmpp sourceFile="${helium.dir}/tools/common/templates/log/${sbs.scan2.template}"
-                         outputfile="@{sbs.log.file}.scan2.html">
+                         outputfile="${build.log.dir}/${base.sbs.log}.scan2.html">
                 <freemarkerLinks expandProperties="yes">
                     macro: ${helium.dir}/tools/common/templates/macro
                 </freemarkerLinks>
@@ -195,9 +231,13 @@
                 </data>
             </fmpp>
             <echo message="generating signal" />
-            <hlm:assertFileExists file="@{sbs.log.file}.scan2.html"/>
+            <hlm:assertFileExists file="${build.log.dir}/${base.sbs.log}.scan2.html"/>
             <hlm:calculateErrorsFromLog logfile="@{sbs.log.file}" />
-            <hlm:compileLogSignalMacro compile.summary.file="${base.sbs.log}" 
+            <echo message="sbs.log.file: @{sbs.log.file}"/>
+            <hlm:compileLogSignalMacro compile.summary.file="@{sbs.log.file}" 
+                error.limit="${build.errors.limit}" phase="compile"/>
+            <echo message="sbs.error.output.file: @{sbs.error.output.file}"/>
+            <hlm:compileLogSignalMacro compile.summary.file="@{sbs.error.output.file}" 
                 error.limit="${build.errors.limit}" phase="compile"/>
             <!-- Blocks packaging configuration generation. -->
             <if>
--- a/buildframework/helium/tools/localisation/localisation-32.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/localisation/localisation-32.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -376,10 +376,10 @@
                 <hlm:createDeltaZipMacro variant="@{variant}" />
                 <!-- getting all languages to localise -->
                 <var name="localisation.languages" unset="true"/>
-                <exec executable="python" outputproperty="localisation.languages" dir="${build.drive}/" failonerror="${failonerror}">
+                <exec executable="python" outputproperty="localisation.languages.output" dir="${build.drive}/" failonerror="${failonerror}">
                     <arg line="${helium.dir}/tools/localisation/getalllanguages.py ${localisation.language.file} @{variant}"/> 
                 </exec>
-                
+                <propertyregex property="localisation.languages" input="${localisation.languages.output}" override="true" regexp="((?: ?\d+)+)$" select="\1"/>
                 <echo>Localising ${localisation.languages}</echo>
                 <propertyregex property="localisation.log" input="${build.log.dir}/localisation_${localisation.languages}.html" regexp="\s+" replace="_" override="true"/>
                 <echo>Localising using ${localisation.tool}.</echo>
--- a/buildframework/helium/tools/preparation/bom/bom.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/preparation/bom/bom.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -255,9 +255,17 @@
                 </if>
             </else>
         </if>
-        <sortlist property="task.owners" override="true" value="${task.owners}"/>
-        <propertyregex property="task.owners" override="true" input="${task.owners}" regexp="([^,]+),.*\1" replace="\1" global='true'/>
-        <for list="${task.owners}" delimiter="," param="task.owner" >
+        <script language="jython" setbeans="false">
+import re
+taskOwnersDup = project.getProperty("task.owners")
+if taskOwnersDup:
+    taskOwnersDup = re.sub(r'\s', '', taskOwnersDup)
+    taskOwners = taskOwnersDup.split(',')
+    if taskOwners:
+        taskOwners = list(set(taskOwners))
+        project.setProperty("task.owners.unique", ",".join(taskOwners))
+        </script>
+        <for list="${task.owners.unique}" delimiter="," param="task.owner" >
             <sequential>
                 <var name="task.owner" value="@{task.owner}"/>
                 <hlm:ldap url="${email.ldap.server}" rootdn="${email.ldap.rootdn}" filter="uid=${task.owner}" outputproperty="task.owner.email" key="mail"/>
--- a/buildframework/helium/tools/preparation/ci.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/preparation/ci.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -43,7 +43,8 @@
 import threadpool
 import subprocess
 import sys
-
+from java.io import IOException
+        
 dir_path = str(attributes.get('dir-path'))
 del_folder_drive = attributes.get('delete-folders-drive')
 pool_size = attributes.get('pool-size')
@@ -70,24 +71,12 @@
 # Delete all dirs based on config
 for dir_ in delete_dirs:
     try:
-        if os.sep == '\\':
-            fileutils.subst(del_folder_drive, dir_)
-            self.log(str("substed for deleting folders"))
-            self.log(str("Removing %s\\" % del_folder_drive))
-            fileutils.rmtree("%s\\" % del_folder_drive)
-            fileutils.unsubst(del_folder_drive)
-            self.log(str("unsubsted substed for deleting folders"))
-        else:
-            self.log(str("Removing %s" % dir_))
-            fileutils.rmtree(dir_)
-    except Exception, e:
-        if os.sep == '\\':
-            try:
-                fileutils.unsubst(del_folder_drive)
-                self.log(str("unsubsted for deleling folders"))
-            except Exception, e2:
-                self.log(str("failed when unsubsting for failed deleting folders... process will continue anyway"))
-        self.log(str("ERROR: %s" % e))
+        self.log(str("Removing %s" % dir_))
+        fileutils.rmtree(dir_)
+    except Exception, exc:
+        self.log(str("ERROR: %s" % exc))
+    except IOException, ioExc:
+        self.log(str("ERROR: %s" % ioExc))
 
 # Delete all config files
 for path_ in found_inputs:
--- a/buildframework/helium/tools/preparation/synergy/ccmgetinput.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/preparation/synergy/ccmgetinput.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -58,7 +58,8 @@
 try:
     configBuilder = configuration.NestedConfigurationBuilder(open(ant.get_property(r'${prep.delivery.conf.parsed}'), 'r'))
     configSet = configBuilder.getConfiguration()
-    builder = preparation.PreparationBuilder(configSet.getConfigurations(), ant.get_property(r'${ccm.user.login}'), ant.get_property(r'${ccm.user.password}'), cache=ant.get_property(r'${ccm.cache.xml}'))
+    password = ant.get_property(r'${ccm.user.password}')
+    builder = preparation.PreparationBuilder(configSet.getConfigurations(), ant.get_property(r'${ccm.user.login}'), password, cache=ant.get_property(r'${ccm.cache.xml}'))
     builder.check()
     builder.get_content()
     builder.close()
--- a/buildframework/helium/tools/preparation/test/test_synergy.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/preparation/test/test_synergy.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -25,14 +25,27 @@
          Testing targets related to Synergy
     </description>
     <property environment="env" />
-    <property name="publish.root.dir" value="${env.TEMP}" />
+    <tempfile property="test.temp.dir" destDir="${env.TEMP}"/>
+    <property name="publish.root.dir" value="${test.temp.dir}" />
     <property name="helium.dir" location="../../.." />
     <import file="../../../helium.ant.xml" />
 
-    <target name="test-ccm-preparation-log-extraction">
-        <delete file="${env.TEMP}/temp.log" failonerror="false"/>
-        <delete file="${env.TEMP}/temp.sqlite" failonerror="false"/>
-        <echo file="${env.TEMP}/temp.log">
+    <target name="setUp">
+        <delete dir="${test.temp.dir}" failonerror="false"/>
+        <au:assertFileDoesntExist file="${test.temp.dir}" />
+        <mkdir dir="${test.temp.dir}" />
+    </target>
+    <target name="tearDown">
+        <delete dir="${test.temp.dir}" />
+    </target>
+
+    <target name="test-ccm-preparation-log-extraction" depends="setUp">
+        <delete file="${test.temp.dir}/temp.log" failonerror="false"/>
+        <delete file="${test.temp.dir}/temp.sqlite" failonerror="false"/>
+        <au:assertFileDoesntExist file="${test.temp.dir}/temp.log" />
+        <au:assertFileDoesntExist file="${test.temp.dir}/temp.sqlite" />
+
+        <echo file="${test.temp.dir}/temp.log">
    [python] INFO:ccm.extra:Using CachedSessionProvider.
    [python] INFO:preparation.ccmgetinput:Get a session for databasexxx
    [python] INFO:ccm:Database path set using the GSCM database.
@@ -86,19 +99,20 @@
    [python] INFO:ccm.extra:Closing the CachedSessionProvider.
    [python] INFO:ccm.extra:Cleaning up opened sessions.
         </echo>
-        <hlm:metadatarecord database="${env.TEMP}/temp.sqlite">
+        <au:assertFileExists file="${test.temp.dir}/temp.log" /> 
+        <hlm:metadatarecord database="${test.temp.dir}/temp.sqlite">
             <hlm:textmetadatainput>
-                <fileset casesensitive="false" file="${env.TEMP}/temp.log" />
+                <fileset casesensitive="false" file="${test.temp.dir}/temp.log" />
                 <metadatafilterset refid="filterset.test.ccm" />
             </hlm:textmetadatainput>
         </hlm:metadatarecord>
-        <hlm:generateBuildStatus dbfile="${env.TEMP}/temp.sqlite" output-dir="${env.TEMP}/signals" file="temp.log" />
+        <hlm:generateBuildStatus dbfile="${test.temp.dir}/temp.sqlite" output-dir="${test.temp.dir}/signals" file="temp.log" />
         <au:assertTrue>
             <and>
                 <not>
-                    <hlm:hasSeverity severity="error" file="${env.TEMP}/signals/temp.log.status.xml"/>
+                    <hlm:hasSeverity severity="error" file="${test.temp.dir}/signals/temp.log.status.xml"/>
                 </not>
-                <hlm:hasSeverity severity="warning" file="${env.TEMP}/signals/temp.log.status.xml"/>
+                <hlm:hasSeverity severity="warning" file="${test.temp.dir}/signals/temp.log.status.xml"/>
             </and>
         </au:assertTrue>
     </target>
--- a/buildframework/helium/tools/publish/synergy.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/publish/synergy.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -28,7 +28,7 @@
     <!-- Validate all the inputs for the publish-tasks-to-folder target. -->
     <target name="publish-tasks-to-folder-check" if="publish.ccm.folder">
         <condition property="do.publish-tasks-to-folder" value="true">
-            <available file="${temp.build.dir}/${build.id}_bom.xml" />
+            <available file="${build.log.dir}/${build.id}_bom.xml" />
         </condition>
     </target>
 
@@ -40,7 +40,7 @@
                 macro: ${helium.dir}/tools/common/templates/macro
             </freemarkerLinks>
             <data expandProperties="yes">
-                bom: xml(${temp.build.dir}/${build.id}_bom.xml)
+                bom: xml(${build.log.dir}/${build.id}_bom.xml)
                 ant: antProperties()
             </data>
         </fmpp>
--- a/buildframework/helium/tools/rombuild/imaker.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/rombuild/imaker.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -108,6 +108,14 @@
                         output="${roms.log.dir}/${build.id}${imaker.rom.name}.roms.log" verbose="true">
             <hlm:imakerconfigurationset refid="imaker.rom.config" />
         </hlm:imaker>
+        <hlm:metadatarecord database="${metadata.dbfile}">
+            <hlm:textmetadatainput>
+                <fileset casesensitive="false" file="${roms.log.dir}/${build.id}${imaker.rom.name}.roms.log" />
+                <metadatafilterset refid="filterset.imaker" />
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:signalMacro logfile="${roms.log.dir}/${build.id}${imaker.rom.name}.roms.log" 
+                         signal.input="rombuildSignalInput" />
         <if>
             <istrue value="${blocks.enabled}" />
             <then>
@@ -131,6 +139,7 @@
     <hlm:defaultEngine id="imaker.engine.default" threads="${number.of.threads}" />
 
     <hlm:emakeEngine id="imaker.engine.ec">
+        <arg value="--emake-emulation=symbian" />
         <arg value="--emake-annofile=${roms.log.dir}/${build.id}${imaker.rom.name}.anno.xml"/>
         <arg value="--emake-root=${env.EMAKE_ROOT}${path.separator}${helium.dir}"/>
         <arg value="--emake-annodetail=basic,history,file,waiting"/>
--- a/buildframework/helium/tools/rombuild/rombuild.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/rombuild/rombuild.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -81,7 +81,7 @@
                 <then>
                     <echo message="target to run @{target}-dryrun" />
                     <exec executable="${imaker.command}" dir="${build.drive}/" output="${build.drive}/dryrun_out.txt" append="true" failonerror="${failonerror}">
-                        <arg line="-p@{product} -f /epoc32/rom/${rom.product.path}/${rombuild.makefile.name}" />
+                        <arg line="-p@{product} -f ${rom.product.path}/${rombuild.makefile.name}" />
                         <arg value="@{target}-dryrun" />
                     </exec>
                 </then>
@@ -90,13 +90,13 @@
                         <istrue value="${rombuild.using.var}" />
                         <then>
                             <exec executable="${imaker.command}" dir="${build.drive}/" failonerror="${failonerror}">
-                                <arg line="-p@{product} -f /epoc32/rom/${rom.product.path}/${rombuild.makefile.name}" />
+                                <arg line="-p@{product} -f ${rom.product.path}/${rombuild.makefile.name}" />
                                 <arg value="@{target}" />
                             </exec>
                         </then>
                         <else>
                             <exec executable="${imaker.command}" dir="${build.drive}/" failonerror="${failonerror}">
-                                <arg line="-p@{product} -c${rom.product.platform} -f /epoc32/rom/${rom.product.path}/${rombuild.makefile.name}" />
+                                <arg line="-p@{product} -c${rom.product.platform} -f ${rom.product.path}/${rombuild.makefile.name}" />
                                 <arg value="@{target}" />
                             </exec>
                         </else>
--- a/buildframework/helium/tools/testing/ats/ats.ant.xml	Wed Jun 23 16:25:55 2010 +0300
+++ b/buildframework/helium/tools/testing/ats/ats.ant.xml	Wed Jun 23 16:36:23 2010 +0300
@@ -149,9 +149,13 @@
                 <condition property="ats.import.arg" value="-import" else="">
                     <equals arg1="${ats.script.type}" arg2="import" />
                 </condition>
-                <java classname="com.nokia.ats.util.server.CommandLineClient" fork="true">
+                <condition property="ats4.libs" value="${helium.dir}/extensions/nokia/external/ats4" else="${helium.dir}/external/antlibs">
+                    <available type="dir" file="${helium.dir}/extensions/nokia/external/ats4"/>
+                </condition>
+                <java classname="com.nokia.ats.util.server.CommandLineClient" fork="true" maxmemory="512m">
                     <classpath>
                         <pathelement path="${java.class.path}"/>
+                        <fileset dir="${ats4.libs}" includes="*.jar"/>
                     </classpath>
                     <arg line="-url http://${ats.server}/ServerService -path ${ats.drop.location.file} ${ats.import.arg}"/>
                 </java>