Merge default with raptor 2.13.0 stable
authorraptorbot
Fri, 16 Apr 2010 19:32:39 +0100
changeset 434 c3bf95590c94
parent 433 5698eefedfc8 (diff)
parent 315 6325833fc679 (current diff)
child 435 7bfa3e482854
Merge default with raptor 2.13.0 stable
--- a/.hgtags	Wed Apr 14 18:01:20 2010 +0100
+++ b/.hgtags	Fri Apr 16 19:32:39 2010 +0100
@@ -3,3 +3,7 @@
 007900c31eef0363e705cf15d131740d4eeb6208 stable
 007900c31eef0363e705cf15d131740d4eeb6208 stable
 976aca38ffe5ce30d7753ea77a8de44e5cbd0dc8 stable
+976aca38ffe5ce30d7753ea77a8de44e5cbd0dc8 stable
+7006bcce52990f33d0c20c51bebc2b58ed36db60 stable
+7006bcce52990f33d0c20c51bebc2b58ed36db60 stable
+679d97112f986e16e9dbed3f7a016388d42e04f8 stable
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/RELEASE-NOTES.html	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,890 @@
+<html>
+<head>
+<title>Release Notes for Symbian Build System v2</title>
+</head>
+<body>
+
+<h1>Release Notes for Symbian Build System v2</h1>
+
+<h2>version 2.13.0</h2>
+
+<h3>New Features</h3>
+<ul>
+
+<li><a href="notes/featurevariantsafe.txt">    Support for FEATUREVARIANTSAFE in BV builds              </a></li>
+<li><a href="notes/cygwin_1_7.txt">            Support for Cygwin 1.7                                   </a></li>
+<li><a href="notes/cross_compiling_tools.txt"> Support for cross-compiling win32 tools on Linux         </a></li>
+<li><a href="notes/system_definition_v3.txt">  Prototype support for reading System Definition v3 files </a></li>
+<li><a href="notes/epocnestedexceptions.txt">  New MMP keyword EPOCNESTEDEXCEPTIONS                     </a></li>
+
+</ul>
+
+<h3>Defect Fixes</h3>
+<ul>
+
+<li>                                                                  DPDEF143018      - Raptor doesn't handle spaces in GCCE installation directory correctly                                                </li>
+<li>                                                                  DPDEF143101      - GCC-E isn't tested as part of the tool checking mechanism                                                            </li>
+<li>                                                                  DPDEF141195      - Raptor doesn't handle spaces in tool paths                                                                           </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2172"> SF Bug 2172 </a> - [Raptor] Resource builds warn on encountering trigraph-like strings                                                  </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2308"> SF Bug 2308 </a> - [Raptor] PLUGIN3 TARGETTYPEs don't set resource output offsets correctly                                             </li>
+<li>                                                                  Fix: in copylogfromannofile mode, ensure that the build id and duration are included in the log.  These are not critical but are useful </li>
+<li>                                                                  Fix: remove unnecessary empty lines in log output in copylogfromannofile mode                                                           </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=1939"> SF Bug 1939 </a> - [Raptor] PAGED keyword in MMP files should imply byte pair compressed                                                </li>
+<li>                                                                  DPDEF144648      - Raptor failed to build tools_deb objects under Windows XP                                                            </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2134"> SF Bug 2134 </a> - [Raptor] Raptor does not pass overridden make variables into its makefiles                                           </li>
+<li>                                                                  Fix : do not allow data to be paged implicitly                                                                                          </li>
+<li>                                                                  Fix : sort build configurations by name for metadata preprocessing                                                                      </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2302"> SF Bug 2302 </a> - sbs_filter refers to python.exe in win32/python264/                                                                  </li>
+<li>                                                                  Fix : ensure that FLMDEBUG is empty by default                                                                                          </li>
+
+</ul>
+
+<!-- older notes are plain text -->
+<pre>
+version 2.12.5
+
+Defect Fixes:
+- Fix: Workaround for emake engine log corruption when clockskew errors occur (annofile2log).
+  Allow Raptor to obtain log from emake annotation file where it is uncorrupted.  A new 
+  Make engine option "copylogfromannofile" enables/disables this mode for emake. If this option is disabled
+  or if no annotation file is specified for the build then Raptor reads logs directly as normal.
+- SF Bug 2125 - [Raptor] - tracecompiler what output incorrect if mmp basename contains '.' e.g. fred.prd.mmp 
+- SF Bug 2191 - [Raptor] - When forcesuccess is enabled, exit status for a failed recipe is "retry" but should be "failed"
+- Fix: extend tracecompiler tests to Linux
+- Fix: Amendment to SF Bug 1511 fix - removal of blanked DEFFILE keyword from e32abiv2ani.flm
+- Fix: improve robustness to bad -c options
+
+
+version 2.12.4
+
+Defect Fixes:
+- SF Bug 2113 - [Raptor] what/check filters can assign files to the wrong components
+- SF Bug 2081 - [Raptor] - Exported file executable permissions not maintained (linux)
+- Fix: host attribute in recipes was blank in windows, windows cluster builds.
+- SF Bug 1912 - Raptor should take python from the path [if not set with SBS_PYTHON or bundled with Raptor]
+- SF Bug 2042 - [Raptor] component field empty in recipe
+- SF Bug 2007 - [Raptor] GCCE 4.4.1 builds require 4.3.1 and 4.3.2 SBS_GCCE???BIN env vars etc.
+- SF Bug 2000 - [Raptor] Talon fails when installed in a path containing the string '-c' (windows only)
+- SF Bug 1861 - [Raptor] More helpful console message in case of timeouts
+- SF Bug 1571 - Raptor cannot report error or warning message in wrong implib project
+- DPDEF142718 Incremental rebuild fails if dependent files deleted
+  --no-depend-generate added to suppress the generation and processing of dependency files
+  .DEFAULT target introduced for all non --no-depend-generate and/or --no-depend-include builds
+- Add support for PLUGIN3 TARGETTYPEs
+- Fixing logfile corruption for large GCCXML builds by suppressing zip output
+- Stop copying .bmp files to epoc32/localisation and fix the "what" reporting
+
+
+version 2.12.3
+
+Defect Fixes:
+- Don't print trace "what" information if we do not run the trace compiler.
+
+
+version 2.12.2
+
+Defect Fixes:
+- SF Bug 1569 - excessive recompilation in incremental tracecompiler builds
+- Better error messages for make-engine selection.
+  e.g. "sbs -e arm" will now produce a useful error message rather than 
+  a traceback. "arm" is a real variant but it's not a make engine.  In
+  the past sbs would have tried to use it and would have failed with a
+  complicated traceback. Also doesn't traceback for non-existent make engines.
+- sbs_filter chose wrong embedded default python version. Set to 2.6.4 now.
+- FilterCheck did not check files when run from sbs_filter
+- Remove old references to python 2.5.2
+- Escape filenames with special XML characters inside &lt;member&gt; tags
+
+
+version 2.12.1
+
+Defect Fixes:
+- SF Bug 1494 - sbs --what does not report Trace Compiler output
+- sbs -c winscw.tracecompiler uses wrong UID and doesn't generate traces
+- SF Bug 1519 - Raptor output files may contain unescaped left angle brackets as XML character data
+
+
+version 2.12.0
+
+New Features:
+- New 'Patchable Constants' target type: TARGETTYPE pdll
+- Combine Linking and Postlinking into a single step - performance improvement.
+- Support exit codes from next version of the trace compiler which will issue them
+- New sbs_filter script and batchfile to ease the use of sbs_filter.py.  
+  Allows filters to be executed over a log after a build has been done.
+    e.g.
+
+  	sbs_filter --filters=FilterWhat < logfile.log 
+
+    (This runs a "--what" without regenerating any makefiles or reparsing
+    the matadata.)
+- New (beta) FilterWhatComp filter.  Simulates abld log output for
+  use with parse_what.pl for packing up zips by component.  Whatcomp output
+  uses the incoming epocroot value.  i.e. if epocroot is relative then so is
+  the what output.  e.g. if EPOCROOT=\ then the output will be of the form:
+
+	"\epoc32\release\armv5\...."  
+
+  If it's "..\myepocroot" then the output will be:
+
+	"..\myepocroot\epoc32\release\armv5".  
+
+  If it's absolute then the what output will also be absolute.
+- New FilterCheck filter.  This can be used with sbs_filter to perform the 
+  equivalent of --check using the log output from a build.  It is more
+  efficient than --check because the metadata is not parsed and no makefiles
+  are generated. e.g.
+
+	sbs_filter --filters=FilterCheck < logfile.log 
+
+- New (beta) graphical build visualisation tool (bin/timelines.py). 
+  Requires pygame and PyOpenGL. e.g.
+
+	python timelines.py < filename.log
+
+- New (beta) log analyser (recipestats.py) for recording the total time spent 
+  in each type of recipe in the build. e.g.
+
+	python recipestats.py < filename.log > stats.csv
+
+  The output is in CSV format.  
+
+Defect Fixes:
+- fix for ARM9E + ARMV5 pre-processing confusion
+- SF bug 1606: template_ext.flm wrongly creates dependencies to OTHER_CFG targets
+- SF bug 1570: Adding then removing a capability can produce incorrect 
+  result: e.g. ALL TCB -TCB becomes ALL -TCB but it should be just ALL
+
+Other Changes:
+- Default to using Python 2.6.4 on windows (no change in compatibility with 
+  older versions of Python).
+
+
+version 2.11.3
+
+Defect Fixes:
+DPDEF142616 Raptor: Variables can be set unnecessarily prior to TEM execution
+Fix for: filter terminal flags up when recipe truncated
+SF bug 170: invalid XML output when a zip file is missing
+SF bug 518: unpaged keyword in mmp files is not parsed properly
+
+
+version 2.11.2
+
+Defect Fixes:
+DPDEF143176 raptor does not respect STDCPP mmp file keyword
+
+
+version 2.11.1
+
+Other Changes:
+GCCE 4.4.1 variant added
+Restored python 2.4 compatibility
+Minor TOOLS2 --what corrections
+Retain Linux execute permissions on unpacked :zip archives
+Prototype of extended timing API added
+Option --noexport added for parallel parsing
+Made --noexport and --export-only mutually exclusive
+SBS_PYTHONPATH insulates sbs from the global PYTHONPATH
+Removed spurious bracket in e32abiv2textnotifier2
+More robust to multiple import library definitions
+
+
+version 2.11.0
+
+New Features:
+Parallel parsing of meta-data
+New keyword APPLY for MMP files
+SAX filter plugin base-class
+
+Defect Fixes:
+DPDEF142895 Raptor does the wrong thing with the ARMFPU keyword
+DPDEF143020 The savespace variant overrides elf2e32's return code
+DPDEF143046 BYTEPAIRCOMPRESSTARGET and INFLATECOMPRESSTARGET not in FLM interface
+Improved error reporting for --check and --what
+
+
+version 2.10.2
+
+Defect Fixes:
+DPDEF142958 regression - ARMV6 and __ARMV6__ are not defined for armv6_urel builds
+DPDEF142730 Raptor crashes with improper VERSION syntax
+DPDEF142928 RVCT 4.0: Linker error when the MMP files modifies the --cpu option
+
+
+version 2.10.1
+
+Defect Fixes:
+DPDEF142666 Cannot remove frozen exports from EABI DEF file in SBSv2
+DPDEF142745 OPTION_REPLACE problems with RVCT 4.0
+DPDEF140622 feature variant configuration file with non exist file set to 'FEATURELISTFILES'
+DPDEF141195 Raptor doesn't handle spaces in tool paths
+DPDEF142616 Raptor: Variables can be set unnecessarily prior to TEM execution
+DPDEF142455 Disable warning L6780W for certain components
+DPDEF142447 GCC-E: Raptor compiles CIA files as Thumb
+DPDEF142448 GCC-E: Raptor tries to build ABIV1 import libraries
+DPDEF142451 GCC-E: Raptor treats C files as C++ files.
+
+
+version 2.10.0
+
+New Features:
+Support for GCCE compiler
+More efficient Feature Variation support
+
+
+version 2.9.3
+
+Defect Fixes:
+DPDEF142166 Raptor sometimes invokes checklib.exe with incorrect parameters
+DPDEF141354 EXPORTUNFROZEN fails in target builds if .savespace is applied
+DPDEF141533 Inconsistent log output
+DPDEF141604 file winscw.auto.bat is released two times
+DPDEF141787 Raptor treats EFREEZE info message as warnings
+	
+Other Changes:
+talon can read commands from a temporary file as well as with -c
+
+
+version 2.9.2
+
+Defect Fixes:
+DPDEF141531 Incorrect RVCT variables passed to TEM
+DPDEF141837 Some problems with dependency (.d) files
+DEF140258 Aborting SBSv2 mid-build often leads to corrupt .d files which prevent rebuilds
+DPDEF142049 Garbage in the Raptor log file
+DPDEF141954 Raptor: "tools" config static libraries can have incorrect compilation macros
+DPDEF141974 Raptor: "tools" builds can fail when done in combination with "tools2" builds
+
+Other Changes:
+Static libraries cannot be feature variant
+Option --no-depend-include for very big builds
+
+
+version 2.9.1
+
+Defect Fixes:
+DPDEF141503 RMTPClient::StartTransport Panic when using emulated test tranport plugin
+DPDEF141688 ARMV6 builds with SBSv2 have problems with missing DEF files
+	
+
+version 2.9.0
+
+New Features:
+Talon shell to reduce memory usage and improve stability.
+Support for RVCT 4.0 advanced features.
+Optionally use SBS_CYGWIN, SBS_MINGW and SBS_PYTHON to locate tools.
+Makefile to build host tools on Linux.
+Single-file compilation for IDE integration.
+Splitlog and CheckSource filters.
+
+Defect Fixes:
+DPDEF141523 Raptor links kernel-side components to scppnwdl.dso
+DPDEF141418 Raptor turns echo on
+DPDEF141495 Raptor doesn't deal correctly with SOURECEPATH beginning with '/'
+DPDEF141388 raptor inserts epoc32\include at start of systeminclude path	
+
+
+version 2.8.6
+
+DPDEF135505 Some TEMs have race conditions for simultaneous urel and udeb. cp fails.
+DPDEF141498 If make crashes, Raptor exits with 0 errors
+DPDEF141071 Raptor: GCCXML build does not support the VAR2 TARGETTYPE
+DPDEF140816 STDCPP keyword in mmp file not interpreted by gccxml tool chain
+DPDEF137727 [Raptor Rollout] Raptor fails to build certain .mbg and .rsg files
+DPDEF137494 SBSv2: preprocessor warnings and errors might cause invalid XML in log
+DPDEF140731 Missing dependency files when building from clean
+DPDEF140540 [System Build]: Changes of Raptor cause 94_331 build failed
+DPDEF141129 raptor generates unknown origin file
+
+Other Changes:
+Fix to support trace compiler switch
+Better message for duplicate objects, states which file overrides which.
+Refactor to avoid "defects" of missing OS variants.
+
+
+version 2.8.5
+
+Defect Fixes:
+DPDEF141102 SBS doesn't set the paging attribute of excutables correctly
+DPDEF140731 Missing dependency files when building from clean
+DPDEF135620 Workaround for broken static libraries
+
+
+version 2.8.4
+
+Defect Fixes:
+DPDEF140839 RComp crashes if it's built with sbs
+DPDEF140929 OPTION GCCE in MMP files generates a build warning
+DPDEF135436 SBSv2 - Python traceback when illegal characters appear on command line
+
+
+version 2.8.3
+
+Defect Fixes:
+DPDEF139904 Raptor: .def file FREEZE attempted for ARMV5 when it shouldn't be
+DPDEF140589 Raptor: .def file FREEZE attempted for WINSCW when it shouldn't be
+DPDEF140456 Raptor build error with -c tools_rel
+DPDEF139759 Raptor warning regarding EXPORTSUNFROZEN is ambiguous
+DPDEF135436 SBSv2 - Python traceback when illegal characters appear on command line
+INC140156 SBSv2 crashes when build QtWebkit for ARMV5
+
+Other Changes:
+Add &lt;info&gt; to show which variant.hrh file is used.
+Replaced the corrupted awk.exe in cygwin distro.
+Fix previous trace compiler auto run mechanism.
+ROMFILE improvements.
+
+
+version 2.8.2
+
+Defect Fixes:
+DPDEF140540 [System Build]: Changes of Raptor cause 94_331 build failed
+
+Other Changes:
+Tolerate XML schema 1_0 files where possible.
+Treat system definition schema 1.[3-9] files the same as schema 1.4 files.
+Remove checksource and its python site-packages.
+
+
+version 2.8.1
+
+Defect Fixes:
+DPDEF140165 SBS error when creating info.xml on component base_omaph2
+DPDEF132996 Location of generated auto.bat files is inconsistent
+
+Other Changes:
+Feature variant "ln -f" fails intermittently in parallel builds.
+Traceback when "group" elements are redefined in XML.
+Trace compiler should run automatically if a trace path exists.
+Need a workaround for Carbide Missing SDK problem.
+
+
+version 2.8.0
+
+New Features:
+XML schema 2.0 with new alias and group elements.
+
+Removed:
+XML config element (use var instead).
+XML .first and .last mechanism (use alias or group instead).
+
+Defect Fixes:
+DPDEF140082 SBS cause env to dirty state
+DPDEF138565 SBSV2 doesn't define the correct macros for ARMV6
+DPDEF139950 SBSv2 Filter Handling not Robust enough - bad filters stop build.
+DEF139686 [TCL Build] coredumpserver compile warnings in DP00458
+
+
+version 2.7.2
+
+Defect Fixes:
+DPDEF139420 Raptor config does not correctly handle mifconv causing resource build errors
+DPDEF138679 Raptor does not create a DEFFILE when building for winscw_urel
+DPDEF139692 SBSV2: 'virtual memory exhausted' when building multiple variants
+DPDEF136321 SBSv2: Zip exports not cleaned
+INC139622 OPTION_REPLACE does not work properly in SBSv2
+
+Other Changes:
+Added utility.prebuilt FLM.
+
+
+version 2.7.1
+
+Defect Fixes:
+DPDEF138366 [T15379] Raptor raise some warnings when build Coredumpserver
+DPDEF139405 SBSV2: Trace compilation fails with large numbers of files.
+DPDEF139572 SBSV2: Changes to '--cpu' option syntax breaks existing MMP files.
+DPDEF139456 Toolcheck file is not created if EPOCROOT is \
+DPDEF133766 Poor SBSv2 reallyclean performance
+DPDEF135780 SBSV2: REALLYCLEAN is not cleaning all files
+
+
+version 2.7.0
+
+New Features:
+DS.1744 Recognize LINKEROPTION in MMP file
+DS.1744 Compiled objects on local filesystem (SBS_BUILD_DIR)
+
+Partial Deliveries:
+DS.1744 CheckSource in Raptor
+
+Defect Fixes:
+DPDEF138293 Carbide: Raptor doesn't resolve variant.cfg entries starting with "\" correctly
+
+
+version 2.6.5
+
+Defect Fixes:
+DPDEF138930 Raptor needs to change to match new trace compiler interface
+
+
+version 2.6.4
+
+Defect Fixes:
+DPDEF138527 [TCL Build] Miss tracecompiler.mk and exclude group for Raptor export
+DPDEF138484 Raptor uses wrong guard causing trace compiler ignores some projects.
+DPDEF138720 BV product folders have missing map files
+DPDEF138721 Raptor uses wrong lib when mmp keyword FIRSTLIB presents.
+DPDEF138053 SBSv2: tools platform: tools not installed by the time they need to be used.
+DPDEF138164 Carbide: Raptor crashes on unrecognised buildinfo.txt content
+DPDEF138296 SBSV2 disables all TOOLS2 compiler warnings
+DPDEF138329 Raptor generates marker file for trace compiler when it's not done
+DPDEF138352 SBSv2: rollout - unsplit EC makefiles not generating correct deps 4 missing .mbg
+DPDEF138480 SBSv2: rollout. Created files sometimes have insufficient permissions on Windows
+DPDEF137511 SBSv2 doesn't behave correctly with the default paging policy
+
+
+version 2.6.3
+
+Defect Fixes:
+DPDEF133508 Number of errors is counted wrong
+DPDEF138098 UID issue in Trace Compiler for Raptor 
+DPDEF138296 SBSV2 disables all TOOLS2 compiler warnings
+
+
+version 2.6.2
+
+Defect Fixes:
+DPDEF135330 Raptor Rollout: bangalore messaging winscw udeb test code
+DPDEF137726 Missing mscvr_readme.txt from the SBSv2 drop
+DPDEF137739 SBSv2: rollout - .cia object files can conflict with .cpp object files 
+
+
+version 2.6.1
+
+Defect Fixes:
+DPDEF137239 raptor does not include the msvcr71 runtime library
+DPDEF137489 BV builds try and write generated .s files in the wrong directory
+
+
+version 2.6.0
+
+New Features:
+DS.1542 SBSv2 generates Open System Trace dictionaries
+DS.1629 Resource autodependencies
+
+
+version 2.5.5
+
+Defect Fixes:
+DPINC137379 Emulator: Cursor is missing on emulator buttons
+DPDEF133640 SBSv2 usrt3_1.lib is missing from epocroot/epoc32/release/armv5/
+
+
+version 2.5.4
+
+Defect Fixes:
+DPDEF136719 Raptor: sbsv2cache.py cache file generation fails with very large log files
+DPDEF136715 On Linux the shipped python 2.5.2 is not found
+DPDEF132996 SBSv2 doesn't generate AUTO.BAT file
+DPDEF136382 SBSv2: explicit dll versioning not supported on arm platforms 	
+DPDEF135843 [Raptor Rollout] Raptor does not support OPTION_REPLACE ARMASM/OPTION ARMASM
+DPDEF136693 makesis fails when multiple instances are run concurrently with the same target
+
+
+version 2.5.3
+
+Defect Fixes:
+DPDEF136162 Raptor: resource dependencies require metadata workarounds
+DPDEF128288 SBSv2 does not fully support build target customization.
+DPDEF132880 BV builds cannot find system static libraries
+DPDEF133835 SBSv2 cannot build for ARMV6 or ARM9E
+
+
+version 2.5.2
+
+Defect Fixes:
+DPDEF135983 cpp-raptor crashes if source code contains builtin macro __FILE__
+DPDEF133808 Raptor does not support OPTION --no_rtti with mixed assembly/C++ projects
+DPDEF135577 SBSv2: rollout - TOOLS/TOOLS2 exes sometimes not executable or writable.
+
+
+version 2.5.1
+
+Defect Fixes:
+DPDEF135258 createvmap.py script can hang in BV builds
+DPDEF135385 warnings in RunModeDebugger in M04816vFuture with ARMV7
+
+
+version 2.5.0
+
+New Features:
+DS.1568 User defined configuration file location(s)
+
+
+version 2.4.3
+
+Defect Fixes:
+DPDEF134322 SBSV2 uses the wrong library when building STDCPP targets 	
+DPDEF132923 SBSv2 freeze don't add Vtable and RTTI information into def file for arm dll
+DPDEF133775 SBSv2: ARMFPU is not passed to compiler
+DPDEF134023 case inconsistency with libOpenVG.lib
+
+Other Changes:
+MINOR_CHANGE updated all copyright notices for SF delivery
+MINOR_CHANGE added vtb91sf variant for SF Timebox 9:1 builds
+MINOR_CHANGE added vtb92sf variant for SF Timebox 9:2 builds
+
+
+version 2.4.2
+
+Defect Fixes:
+DPDEF133820 Raptor Rollout: EXPORTUNFROZEN processing incorrect in ARMV5 builds
+DPDEF132033 Raptor picks up the wrong bld.inf macros when building for RVCT 3.1
+DPDEF133772 SBSv2: console log includes some winscw warnings that should be suppressed
+
+
+version 2.4.1
+
+Defect Fixes:
+DPDEF133639 Raptor Rollout:TEF test server doesn't start under SBSv2 - OK with abld
+DEF133255 [System Build]: Error in compiling NaviEngine Unistore on ARMV7 M04816 vFuture
+DPDEF127973 Freeze fails with SBSv2 under some environments
+
+
+version 2.4.0
+
+New Features:
+DS.1475 Pluggable Log Summariser
+DS.1476 Use FLMs from the source tree  
+
+Defect Fixes:
+DPDEF133417 SBSv2: tmp mounting errors on startup
+
+
+version 2.3.3
+
+Defect Fixes:
+DPDEF130261 sbs does not support explicit option to version keyword
+DPDEF130598 sbs does not provide debug and nodebug variants
+DPDEF131630 Raptor smoke tests break when EPOCROOT=\ on Windows
+DPDEF132898 no TEM nbl2.lib dependencies for armv7
+DPDEF133035 SBSv2 - Tools2 build does not include -m32 option.  Stlport flm also doesn't.
+DPDEF133176 SBSv2 ignores compillation error for "unidentified identifier" for winscw build
+
+
+version 2.3.2
+
+Other Changes:
+MINOR_CHANGE added vtb92 variant for Timebox 9:2 builds
+
+
+version 2.3.1
+
+Defect Fixes:
+DPDEF132374 SBSv2: Directory creation can fail leading to build errors
+DPDEF132070 SBSv2: stlport 5.2 build fails - library generated to wrong directory
+DPDEF128378 SBSv2 help for global targets only shown when a target is given
+DPDEF129634 ALWAYS_BUILD_AS_ARM does not suppress __MARM_THUMB__ with SBSv2
+
+
+version 2.3.0
+
+New Features:
+DS.1424 Support for ARMV5SMP platform  
+
+Defect Fixes:
+DPDEF129804 SBSv2 crashes when there are double \\ in prj_mmpfiles in bld.inf
+DPDEF130892 SBSv2: Reallyclean fails on TEM files
+DPDEF131619 SBSv2: ABIv1 .lib files aren't generated for -c armv5 -c armv5.smp
+DPDEF131637 SBSv2: stlport can fail to build under Cygwin - "/tmp no such directory"
+DPDEF131891 [System Build]: Errors in GT stage in Build M04774 vfuture
+
+
+version 2.2.9
+
+Defect Fixes:
+DPDEF129804 SBSv2 crashes when there are double \\ in prj_mmpfiles in bld.inf
+DPDEF131637 SBSv2: stlport can fail to build under Cygwin - "/tmp no such directory"
+DPDEF130892 SBSv2: Reallyclean fails on TEM files
+
+
+version 2.2.8
+
+Defect Fixes:
+DPDEF130569 .lib files for SSM targets build with different name compared to abld
+DPDEF130571 libxml2 component contains GCCXML build errors
+DPDEF131312 SBSv2 - DEBUGGABLE_UDEBONLY not supported by SBSv2 (Raptor)
+
+
+version 2.2.7
+
+Defect Fixes:
+DPDEF130533 SBSv2 fails to run when installed from SITK
+DPDEF130452 Some rcomp warnings need to be disabled
+DPDEF130286 SBSv2: sbs freezes during CLEAN and REALLYCLEAN operations.
+DPDEF127973 Freeze fails with SBSv2 under some environments
+DPDEF128455 Error during freeze with SBSv2
+DPDEF127149 SBSv2 TEM/extension makefile build doesn't support the .savespace variant
+
+
+version 2.2.6
+
+Defect Fixes:
+DPDEF130008 SBSv2 should recognize these new keywords: SMPSAFE, PAGEDCODE, PAGEDDATA, UN...
+DPDEF127887 Current directory wrong when executing extension makefiles in SBSv2
+DPDEF128915 CCheckEnv ERROR: CBRPatch: Absent file
+DPDEF127675 Raptor does not process stringtables correctly when HEADERONLY is on
+DPDEF127878 give wrong mmp filename for -p option should cause error in SBSv2
+
+Other Changes:
+Uses cygwin instead of msys for improved stability.
+Includes python 2.5.2 instead of using py2exe.
+
+
+version 2.2.5
+
+Defect Fixes:
+DEF127329 OMAP H4 Unistore2 Failure in Raptor 9.5 GT build
+DPDEF128632 SBSv2 : bld.inf ':zip' exports don't maintain timestamps, with an e32 impact
+DPDEF127399 SBSv2 -p [filename].mmp options also builds .mk files
+
+
+version 2.2.4
+
+Defect Fixes:
+DPDEF129187 SBSv2: ABIv1 .lib files are required (again)
+
+
+version 2.2.3
+
+Defect Fixes:
+DPDEF128916 C Standard Library failed on cia2cpp2o armv5 with 1
+DPDEF128503 sbs 2.2.0 produce malformed xml log on Linux with pvmgmake
+DPDEF127604 SIS registry panics at startup on emulator if SWI is built with SBS
+DPDEF128690 SBSv2 generates error when using emake on REALLYCLEAN target
+
+Other Changes:
+MINOR_CHANGE log summariser updated to deal with errors starting "make.exe: ***"
+
+
+version 2.2.2
+
+Defect Fixes:
+DPDEF127497 SBSv2 does not clean when -k or other switch is used with abld wrapper
+DPDEF127829 'cannot open Meta file' warning with SBSv2
+DPDEF127371 abld -v not working correctly through sbsv2
+DPDEF127555 SBSv2 doesn't do "romfile"
+
+Other Changes:
+MINOR_CHANGE made the default number of jobs 4
+
+
+version 2.2.1
+
+Defect Fixes:
+DPDEF128498 SBS creates paths with extra slashes which can cause problems
+
+Other Changes:
+MINOR_CHANGE Removed temporary ABIv1 .lib generation
+MINOR_CHANGE Added monty test data to the test folder
+
+
+version 2.2.0
+
+New Features:
+DS.1347 SBSv2 Compiler Selection  
+DS.1348 SBSv2 allow mixed slashes
+
+Defect Fixes:
+DPDEF127904	SBSv2 : recent installdefaultcommdb has broken the 9.4 build
+DPDEF128022	SBSv2: Unrecognised Keyword ['romtarget  some_file.dll'] warnings
+DPDEF127815	SBSv2: PAGED and EPOCCALLDLLENTRYPOINTS keywords not supported
+DPDEF127890	SBSv2:  TARGETPATH in mmps (also resources, bitmaps) must cope with backslashes
+DPDEF128229 SBSv2: some command invocations can fail, but could be "re-tried"
+
+
+version 2.1.10
+
+Defect Fixes:
+DPDEF126662	Intermittent networking_dhcp compilation failure in Raptor build GT phase
+DPDEF127799	SBSv2: zip and unzip commands not found in some builds
+DPDEF127665	ARMV7 libraries have wrong link order in Raptor
+
+
+version 2.1.9
+
+Defect Fixes:
+DPDEF127498	SBSv2: importlibversioned_abiv1 intermittently fails in ARMV5 builds
+DPDEF125483	CDB breaks due to Attribute values not matching expected values
+DPDEF126335	Intermittent GT errors due to "make" not being found on the PATH
+DPDEF127562	SBSv2 will not unzip the same file into more than one location
+DPDEF127626	SBSv2: sed version on windows is out of date
+
+
+version 2.1.8
+
+Defect Fixes:
+DPDEF125478	CDB breaks caused by file path/name mismatch
+DPDEF125145	Incorrect file access permissions for sbs v2.0.14 in Linux distribution
+DPDEF126126	Intermittent "Segmentation fault" error in Raptor GT phase
+DPDEF124836	SBSv2 cannot build just a single .mmp file from a bld.inf file
+DPDEF126675	Performance regression in SBSv2 python frontend caused by regex usage,
+DPDEF126790	groupin10 is not used in artarget_func
+DPDEF125639	TEM variables are reported incorrectly when building TEM for ARMV7
+DPDEF124273	abld help is ugly and hard to read
+DPDEF126614	"Virtual memory exhausted. Stop" error when building with SBSV2
+
+
+version 2.1.7
+
+Defect Fixes:
+DPDEF124290 SBS -e pvmgmake -j 12 on Linux produces malformed xml log files
+DPDEF126241	SBSv2 : SECURE_DATA error when building uiklaf toolkit in TechView
+DPDEF126328	Performance regression and related excessive memory usage in daily Raptor builds
+
+
+version 2.1.6
+
+Defect Fixes:
+DPDEF125740	SBSv2: Builds can hang during the GT stage in Windows builds when using "-j x"
+DPDEF125145	Incorrect file access permissions for sbs v2.0.14 in Linux distribution
+
+
+version 2.1.5
+
+Defect Fixes:
+DPDEF125812	There is no user created init.xml configuration file
+
+
+version 2.1.4
+
+Defect Fixes:
+DPDEF124680 Raptor builds hang  at "tools2" compilation phase
+DPDEF125304 Raptor crashes when running abld
+
+
+version 2.1.3
+
+Defect Fixes:
+DPDEF125394 sbs_2.1.0_(RC1) Building complete OS gives armasm errors on Windows
+DPDEF122556 GT0367: CLEANEXPORT target is not cleaning files with a space in them
+DPDEF124691 Raptor should ignore the new SMPSAFE keyword
+DPDEF125031 SBSv2 Stringtable build fails when EXPORTPATH specified
+
+
+version 2.1.2
+
+Change Requests:
+CR1413 Support for different toolchains to be called by SBSv1 and SBSv2
+
+
+version 2.1.1	
+
+Defect Fixes:
+DEF124748 GCCXML errors in Raptor related to missing arm lib files
+DEF124756 Raptor build : Orphan files reported in CBR phase
+DEF124758 Raptor build CBR errors due to missing ".a" files
+DEF124573 CDB breaks in Raptor build due to missing header,dll and lib files
+
+
+version 2.1.0
+
+Change Requests:
+CR1479 Add Armv7 support into SBSv2
+
+Defect Fixes:
+DEF124543 Raptor does not handle the STDCPP keyword correctly
+DEF124515 GT0367: 'bldmake plat' should now show ARMV7
+
+
+version 2.0.14
+
+Defect Fixes:
+DEF124705 CBR errors in raptor builds due to missing rpp files
+DEF120328 SBS v2.0 configuration files cannot be validated
+INC124096 Long list of MMP macros causes crashdump with .s files
+DEF124702 GT0367: Semaphores need altering to correct possible hangs (on Linux)
+
+
+version 2.0.13
+
+Defect Fixes:
+DEF123653 SBS -j 16 on Windows produces malformed xml log files
+
+
+version 2.0.12
+
+Defect Fixes:
+DEF123987 Raptor does not build a lot of .lib files for ARMV5
+DEF123981 SBSv2 doesn't generate DSO when EXPORTUNFROZEN is specified.
+
+
+version 2.0.11
+
+Defect Fixes:
+DEF123988 SBSv2 does not produce rpp files
+DEF123766 SBSv2 log output does not match the specification
+DEF122781 GT0367: 'bldmake bldfiles' output not going to stdout
+DEF122885 GT0367: Need to stop sbs -abld functioning on Linux
+DEF123354 GT0367: Incorrect output if the number of jobs provided is invalid
+
+
+version 2.0.10
+
+Defect Fixes:
+DEF123984 SBSv2 generates more warnings than abld
+DEF124139 GT0367: SBS causes a Python Traceback when a system_definition.xml error occurs
+DEF123601 SBSv2 : Python traceback error is reported when try to build systemtest code
+DEF123916 SBSv2 : "tools" build warns about overrides when "OPTION MSVC /w" in .mmp files
+
+
+version 2.0.9
+
+Defect Fixes:
+PDEF124028 .GXP files not getting created when built for GCCXML target
+DEF123653 SBS -j 16 on Windows produces malformed xml log files
+DEF123586 dso file is not remade when def file changes
+DEF122541 SBSv2 -what should report resource files
+DEF123265 Incorrect file access permissions for sbs v2.0.7 in Linux dist
+DEF123317 SBSv2 -what got error for whatexports if too much exports
+DEF123439 SBSv2 : Exports not performed in total before .mmp processing in sysdef builds
+DEF123552 STLport doesn't build with Raptor on Linux
+DEF123260 GT0367: Circular references in config files not handled
+
+
+version 2.0.8
+
+Defect Fixes:
+DEF122930 SBSv2:Target type exexp giving errors while building for winscw
+DEF123028 Raptor generating double slashes in command files
+DEF123048 SBSv2: build with -k (keep-going) stops when export makefile has a failure.
+DEF123069 False 'missing mmp file' errors reported by SBSv2
+DEF122472 SBSv2 doesn't report content of unpacked zip files
+DEF122534 SBSv2 -what should not report .sym files
+DEF123181 SBSv2: Failure of one export in python aborts remaining exports for bld.inf
+DEF123289 SBSv2 : Netcards doesn't build for "tools" in an SBSv2 build
+DEF123418 SBSV2: stlport build can fail with "no rule to make target"
+DEF123084 SBSv2: exits with an exception if -c option specifies non-existent configuration
+INC122876 Electric Accelerator build fails with Raptor
+
+
+version 2.0.7
+
+Defect Fixes:
+DEF122784 Large MMP files and GNUMAKEFILE causes shell to crash
+DEF122760 Problems with bmconv command files preventing bitmap generation?
+DEF122803 SBSv2 - Freeze doesnt work properly for OE target types
+DEF122833 SBSV2 Performance is poor with -j16 using the GNU Make engine
+DEF122535 GT0367: Invalid system_definition.xml causes SBSv2 layering crash
+DEF122570 SBSv2 : certain "-m" values cause a crash at makefile generation
+DEF122604 Errors in GT only build using sbsv2 on Windows
+DEF122796 Wrong default value for PVMGMAKE in make.xml
+DEF122783 SBSv2 WINSCW builds can produce incorrectly linked executables under emake
+DEF122785 log summariser crashes if errors contain % characters
+DEF122870 SBSv2 assembling .s files fails.
+DEF120473 Enable Windows and Linux Tools to Cohabit
+DEF121826 Pre-include HRH file directory from variant.cfg fails for template extension mak
+DEF121907 Raptor crashes when exporting zip file that already exists
+DEF122523 SBSv2 Logging output affected by bash version on Linux
+DEF122788 SBSv2: We don't ensure correct version of Make for TEMs and for use in FLMs
+
+
+version 2.0.6
+
+The first release of SBSv2 in the SITK.
+
+</pre>
+</body>
+</html>
--- a/sbsv2/raptor/RELEASE-NOTES.txt	Wed Apr 14 18:01:20 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,833 +0,0 @@
-Release Notes for Symbian Build System v2
-
-version 2.12.4
-
-Defect Fixes:
-- SF Bug 2125 - [Raptor] - tracecompiler what output incorrect if mmp basename contains '.' e.g. fred.prd.mmp 
-- SF Bug 2113 - [Raptor] what/check filters can assign files to the wrong components
-- SF Bug 2081/1971 - [Raptor] - Exported file executable permissions not maintained (linux)
-- SF Bug 1912 - Raptor should take python from the path [if not set with SBS_PYTHON or bundled with Raptor]
-- SF Bug 2042 - [Raptor] component field empty in recipe
-- SF Bug 2007 - [Raptor] GCCE 4.4.1 builds require 4.3.1 and 4.3.2 SBS_GCCE???BIN env vars etc.
-- SF Bug 2000 - [Raptor] Talon fails when installed in a path containing the string '-c' (windows only)
-- SF Bug 1861 - [Raptor] More helpful console message in case of timeouts
-- SF Bug 1571 - Raptor cannot report error or warning message in wrong implib project
-- DPDEF142718 Incremental rebuild fails if dependent files deleted
-  --no-depend-generate added to suppress the generation and processing of dependency files
-  .DEFAULT target introduced for all non --no-depend-generate and/or --no-depend-include builds
-- Add support for PLUGIN3 TARGETTYPEs
-- Fixing logfile corruption for large GCCXML builds by suppressing zip output
-- Fix: host attribute in recipes was blank in windows, windows cluster builds.
-- Stop copying .bmp files to epoc32/localisation and fix the "what" reporting
-
-
-version 2.12.3
-
-Defect Fixes:
-- Don't print trace "what" information if we do not run the trace compiler.
-
-
-version 2.12.2
-
-Defect Fixes:
-- SF Bug 1569 - excessive recompilation in incremental tracecompiler builds
-- Better error messages for make-engine selection.
-  e.g. "sbs -e arm" will now produce a useful error message rather than 
-  a traceback. "arm" is a real variant but it's not a make engine.  In
-  the past sbs would have tried to use it and would have failed with a
-  complicated traceback. Also doesn't traceback for non-existent make engines.
-- sbs_filter chose wrong embedded default python version. Set to 2.6.4 now.
-- FilterCheck did not check files when run from sbs_filter
-- Remove old references to python 2.5.2
-- Escape filenames with special XML characters inside <member> tags
-
-
-version 2.12.1
-
-Defect Fixes:
-- SF Bug 1494 - sbs --what does not report Trace Compiler output
-- sbs -c winscw.tracecompiler uses wrong UID and doesn't generate traces
-- SF Bug 1519 - Raptor output files may contain unescaped left angle brackets as XML character data
-
-
-version 2.12.0
-
-New Features:
-- New 'Patchable Constants' target type: TARGETTYPE pdll
-- Combine Linking and Postlinking into a single step - performance improvement.
-- Support exit codes from next version of the trace compiler which will issue them
-- New sbs_filter script and batchfile to ease the use of sbs_filter.py.  
-  Allows filters to be executed over a log after a build has been done.
-    e.g.
-
-  	sbs_filter --filters=FilterWhat < logfile.log 
-
-    (This runs a "--what" without regenerating any makefiles or reparsing
-    the matadata.)
-- New (beta) FilterWhatComp filter.  Simulates abld log output for
-  use with parse_what.pl for packing up zips by component.  Whatcomp output
-  uses the incoming epocroot value.  i.e. if epocroot is relative then so is
-  the what output.  e.g. if EPOCROOT=\ then the output will be of the form:
-
-	"\epoc32\release\armv5\...."  
-
-  If it's "..\myepocroot" then the output will be:
-
-	"..\myepocroot\epoc32\release\armv5".  
-
-  If it's absolute then the what output will also be absolute.
-- New FilterCheck filter.  This can be used with sbs_filter to perform the 
-  equivalent of --check using the log output from a build.  It is more
-  efficient than --check because the metadata is not parsed and no makefiles
-  are generated. e.g.
-
-	sbs_filter --filters=FilterCheck < logfile.log 
-
-- New (beta) graphical build visualisation tool (bin/timelines.py). 
-  Requires pygame and PyOpenGL. e.g.
-
-	python timelines.py < filename.log
-
-- New (beta) log analyser (recipestats.py) for recording the total time spent 
-  in each type of recipe in the build. e.g.
-
-	python recipestats.py < filename.log > stats.csv
-
-  The output is in CSV format.  
-
-Defect Fixes:
-- fix for ARM9E + ARMV5 pre-processing confusion
-- SF bug 1606: template_ext.flm wrongly creates dependencies to OTHER_CFG targets
-- SF bug 1570: Adding then removing a capability can produce incorrect 
-  result: e.g. ALL TCB -TCB becomes ALL -TCB but it should be just ALL
-
-Other Changes:
-- Default to using Python 2.6.4 on windows (no change in compatibility with 
-  older versions of Python).
-
-
-version 2.11.3
-
-Defect Fixes:
-DPDEF142616 Raptor: Variables can be set unnecessarily prior to TEM execution
-Fix for: filter terminal flags up when recipe truncated
-SF bug 170: invalid XML output when a zip file is missing
-SF bug 518: unpaged keyword in mmp files is not parsed properly
-
-
-version 2.11.2
-
-Defect Fixes:
-DPDEF143176 raptor does not respect STDCPP mmp file keyword
-
-
-version 2.11.1
-
-Other Changes:
-GCCE 4.4.1 variant added
-Restored python 2.4 compatibility
-Minor TOOLS2 --what corrections
-Retain Linux execute permissions on unpacked :zip archives
-Prototype of extended timing API added
-Option --noexport added for parallel parsing
-Made --noexport and --export-only mutually exclusive
-SBS_PYTHONPATH insulates sbs from the global PYTHONPATH
-Removed spurious bracket in e32abiv2textnotifier2
-More robust to multiple import library definitions
-
-
-version 2.11.0
-
-New Features:
-Parallel parsing of meta-data
-New keyword APPLY for MMP files
-SAX filter plugin base-class
-
-Defect Fixes:
-DPDEF142895 Raptor does the wrong thing with the ARMFPU keyword
-DPDEF143020 The savespace variant overrides elf2e32's return code
-DPDEF143046 BYTEPAIRCOMPRESSTARGET and INFLATECOMPRESSTARGET not in FLM interface
-Improved error reporting for --check and --what
-
-
-version 2.10.2
-
-Defect Fixes:
-DPDEF142958 regression - ARMV6 and __ARMV6__ are not defined for armv6_urel builds
-DPDEF142730 Raptor crashes with improper VERSION syntax
-DPDEF142928 RVCT 4.0: Linker error when the MMP files modifies the --cpu option
-
-
-version 2.10.1
-
-Defect Fixes:
-DPDEF142666 Cannot remove frozen exports from EABI DEF file in SBSv2
-DPDEF142745 OPTION_REPLACE problems with RVCT 4.0
-DPDEF140622 feature variant configuration file with non exist file set to 'FEATURELISTFILES'
-DPDEF141195 Raptor doesn't handle spaces in tool paths
-DPDEF142616 Raptor: Variables can be set unnecessarily prior to TEM execution
-DPDEF142455 Disable warning L6780W for certain components
-DPDEF142447 GCC-E: Raptor compiles CIA files as Thumb
-DPDEF142448 GCC-E: Raptor tries to build ABIV1 import libraries
-DPDEF142451 GCC-E: Raptor treats C files as C++ files.
-
-
-version 2.10.0
-
-New Features:
-Support for GCCE compiler
-More efficient Feature Variation support
-
-
-version 2.9.3
-
-Defect Fixes:
-DPDEF142166 Raptor sometimes invokes checklib.exe with incorrect parameters
-DPDEF141354 EXPORTUNFROZEN fails in target builds if .savespace is applied
-DPDEF141533 Inconsistent log output
-DPDEF141604 file winscw.auto.bat is released two times
-DPDEF141787 Raptor treats EFREEZE info message as warnings
-	
-Other Changes:
-talon can read commands from a temporary file as well as with -c
-
-
-version 2.9.2
-
-Defect Fixes:
-DPDEF141531 Incorrect RVCT variables passed to TEM
-DPDEF141837 Some problems with dependency (.d) files
-DEF140258 Aborting SBSv2 mid-build often leads to corrupt .d files which prevent rebuilds
-DPDEF142049 Garbage in the Raptor log file
-DPDEF141954 Raptor: "tools" config static libraries can have incorrect compilation macros
-DPDEF141974 Raptor: "tools" builds can fail when done in combination with "tools2" builds
-
-Other Changes:
-Static libraries cannot be feature variant
-Option --no-depend-include for very big builds
-
-
-version 2.9.1
-
-Defect Fixes:
-DPDEF141503 RMTPClient::StartTransport Panic when using emulated test tranport plugin
-DPDEF141688 ARMV6 builds with SBSv2 have problems with missing DEF files
-	
-
-version 2.9.0
-
-New Features:
-Talon shell to reduce memory usage and improve stability.
-Support for RVCT 4.0 advanced features.
-Optionally use SBS_CYGWIN, SBS_MINGW and SBS_PYTHON to locate tools.
-Makefile to build host tools on Linux.
-Single-file compilation for IDE integration.
-Splitlog and CheckSource filters.
-
-Defect Fixes:
-DPDEF141523 Raptor links kernel-side components to scppnwdl.dso
-DPDEF141418 Raptor turns echo on
-DPDEF141495 Raptor doesn't deal correctly with SOURECEPATH beginning with '/'
-DPDEF141388 raptor inserts epoc32\include at start of systeminclude path	
-
-
-version 2.8.6
-
-DPDEF135505 Some TEMs have race conditions for simultaneous urel and udeb. cp fails.
-DPDEF141498 If make crashes, Raptor exits with 0 errors
-DPDEF141071 Raptor: GCCXML build does not support the VAR2 TARGETTYPE
-DPDEF140816 STDCPP keyword in mmp file not interpreted by gccxml tool chain
-DPDEF137727 [Raptor Rollout] Raptor fails to build certain .mbg and .rsg files
-DPDEF137494 SBSv2: preprocessor warnings and errors might cause invalid XML in log
-DPDEF140731 Missing dependency files when building from clean
-DPDEF140540 [System Build]: Changes of Raptor cause 94_331 build failed
-DPDEF141129 raptor generates unknown origin file
-
-Other Changes:
-Fix to support trace compiler switch
-Better message for duplicate objects, states which file overrides which.
-Refactor to avoid "defects" of missing OS variants.
-
-
-version 2.8.5
-
-Defect Fixes:
-DPDEF141102 SBS doesn't set the paging attribute of excutables correctly
-DPDEF140731 Missing dependency files when building from clean
-DPDEF135620 Workaround for broken static libraries
-
-
-version 2.8.4
-
-Defect Fixes:
-DPDEF140839 RComp crashes if it's built with sbs
-DPDEF140929 OPTION GCCE in MMP files generates a build warning
-DPDEF135436 SBSv2 - Python traceback when illegal characters appear on command line
-
-
-version 2.8.3
-
-Defect Fixes:
-DPDEF139904 Raptor: .def file FREEZE attempted for ARMV5 when it shouldn't be
-DPDEF140589 Raptor: .def file FREEZE attempted for WINSCW when it shouldn't be
-DPDEF140456 Raptor build error with -c tools_rel
-DPDEF139759 Raptor warning regarding EXPORTSUNFROZEN is ambiguous
-DPDEF135436 SBSv2 - Python traceback when illegal characters appear on command line
-INC140156 SBSv2 crashes when build QtWebkit for ARMV5
-
-Other Changes:
-Add <info> to show which variant.hrh file is used.
-Replaced the corrupted awk.exe in cygwin distro.
-Fix previous trace compiler auto run mechanism.
-ROMFILE improvements.
-
-
-version 2.8.2
-
-Defect Fixes:
-DPDEF140540 [System Build]: Changes of Raptor cause 94_331 build failed
-
-Other Changes:
-Tolerate XML schema 1_0 files where possible.
-Treat system definition schema 1.[3-9] files the same as schema 1.4 files.
-Remove checksource and its python site-packages.
-
-
-version 2.8.1
-
-Defect Fixes:
-DPDEF140165 SBS error when creating info.xml on component base_omaph2
-DPDEF132996 Location of generated auto.bat files is inconsistent
-
-Other Changes:
-Feature variant "ln -f" fails intermittently in parallel builds.
-Traceback when "group" elements are redefined in XML.
-Trace compiler should run automatically if a trace path exists.
-Need a workaround for Carbide Missing SDK problem.
-
-
-version 2.8.0
-
-New Features:
-XML schema 2.0 with new alias and group elements.
-
-Removed:
-XML config element (use var instead).
-XML .first and .last mechanism (use alias or group instead).
-
-Defect Fixes:
-DPDEF140082 SBS cause env to dirty state
-DPDEF138565 SBSV2 doesn't define the correct macros for ARMV6
-DPDEF139950 SBSv2 Filter Handling not Robust enough - bad filters stop build.
-DEF139686 [TCL Build] coredumpserver compile warnings in DP00458
-
-
-version 2.7.2
-
-Defect Fixes:
-DPDEF139420 Raptor config does not correctly handle mifconv causing resource build errors
-DPDEF138679 Raptor does not create a DEFFILE when building for winscw_urel
-DPDEF139692 SBSV2: 'virtual memory exhausted' when building multiple variants
-DPDEF136321 SBSv2: Zip exports not cleaned
-INC139622 OPTION_REPLACE does not work properly in SBSv2
-
-Other Changes:
-Added utility.prebuilt FLM.
-
-
-version 2.7.1
-
-Defect Fixes:
-DPDEF138366 [T15379] Raptor raise some warnings when build Coredumpserver
-DPDEF139405 SBSV2: Trace compilation fails with large numbers of files.
-DPDEF139572 SBSV2: Changes to '--cpu' option syntax breaks existing MMP files.
-DPDEF139456 Toolcheck file is not created if EPOCROOT is \
-DPDEF133766 Poor SBSv2 reallyclean performance
-DPDEF135780 SBSV2: REALLYCLEAN is not cleaning all files
-
-
-version 2.7.0
-
-New Features:
-DS.1744 Recognize LINKEROPTION in MMP file
-DS.1744 Compiled objects on local filesystem (SBS_BUILD_DIR)
-
-Partial Deliveries:
-DS.1744 CheckSource in Raptor
-
-Defect Fixes:
-DPDEF138293 Carbide: Raptor doesn't resolve variant.cfg entries starting with "\" correctly
-
-
-version 2.6.5
-
-Defect Fixes:
-DPDEF138930 Raptor needs to change to match new trace compiler interface
-
-
-version 2.6.4
-
-Defect Fixes:
-DPDEF138527 [TCL Build] Miss tracecompiler.mk and exclude group for Raptor export
-DPDEF138484 Raptor uses wrong guard causing trace compiler ignores some projects.
-DPDEF138720 BV product folders have missing map files
-DPDEF138721 Raptor uses wrong lib when mmp keyword FIRSTLIB presents.
-DPDEF138053 SBSv2: tools platform: tools not installed by the time they need to be used.
-DPDEF138164 Carbide: Raptor crashes on unrecognised buildinfo.txt content
-DPDEF138296 SBSV2 disables all TOOLS2 compiler warnings
-DPDEF138329 Raptor generates marker file for trace compiler when it's not done
-DPDEF138352 SBSv2: rollout - unsplit EC makefiles not generating correct deps 4 missing .mbg
-DPDEF138480 SBSv2: rollout. Created files sometimes have insufficient permissions on Windows
-DPDEF137511 SBSv2 doesn't behave correctly with the default paging policy
-
-
-version 2.6.3
-
-Defect Fixes:
-DPDEF133508 Number of errors is counted wrong
-DPDEF138098 UID issue in Trace Compiler for Raptor 
-DPDEF138296 SBSV2 disables all TOOLS2 compiler warnings
-
-
-version 2.6.2
-
-Defect Fixes:
-DPDEF135330 Raptor Rollout: bangalore messaging winscw udeb test code
-DPDEF137726 Missing mscvr_readme.txt from the SBSv2 drop
-DPDEF137739 SBSv2: rollout - .cia object files can conflict with .cpp object files 
-
-
-version 2.6.1
-
-Defect Fixes:
-DPDEF137239 raptor does not include the msvcr71 runtime library
-DPDEF137489 BV builds try and write generated .s files in the wrong directory
-
-
-version 2.6.0
-
-New Features:
-DS.1542 SBSv2 generates Open System Trace dictionaries
-DS.1629 Resource autodependencies
-
-
-version 2.5.5
-
-Defect Fixes:
-DPINC137379 Emulator: Cursor is missing on emulator buttons
-DPDEF133640 SBSv2 usrt3_1.lib is missing from epocroot/epoc32/release/armv5/
-
-
-version 2.5.4
-
-Defect Fixes:
-DPDEF136719 Raptor: sbsv2cache.py cache file generation fails with very large log files
-DPDEF136715 On Linux the shipped python 2.5.2 is not found
-DPDEF132996 SBSv2 doesn't generate AUTO.BAT file
-DPDEF136382 SBSv2: explicit dll versioning not supported on arm platforms 	
-DPDEF135843 [Raptor Rollout] Raptor does not support OPTION_REPLACE ARMASM/OPTION ARMASM
-DPDEF136693 makesis fails when multiple instances are run concurrently with the same target
-
-
-version 2.5.3
-
-Defect Fixes:
-DPDEF136162 Raptor: resource dependencies require metadata workarounds
-DPDEF128288 SBSv2 does not fully support build target customization.
-DPDEF132880 BV builds cannot find system static libraries
-DPDEF133835 SBSv2 cannot build for ARMV6 or ARM9E
-
-
-version 2.5.2
-
-Defect Fixes:
-DPDEF135983 cpp-raptor crashes if source code contains builtin macro __FILE__
-DPDEF133808 Raptor does not support OPTION --no_rtti with mixed assembly/C++ projects
-DPDEF135577 SBSv2: rollout - TOOLS/TOOLS2 exes sometimes not executable or writable.
-
-
-version 2.5.1
-
-Defect Fixes:
-DPDEF135258 createvmap.py script can hang in BV builds
-DPDEF135385 warnings in RunModeDebugger in M04816vFuture with ARMV7
-
-
-version 2.5.0
-
-New Features:
-DS.1568 User defined configuration file location(s)
-
-
-version 2.4.3
-
-Defect Fixes:
-DPDEF134322 SBSV2 uses the wrong library when building STDCPP targets 	
-DPDEF132923 SBSv2 freeze don't add Vtable and RTTI information into def file for arm dll
-DPDEF133775 SBSv2: ARMFPU is not passed to compiler
-DPDEF134023 case inconsistency with libOpenVG.lib
-
-Other Changes:
-MINOR_CHANGE updated all copyright notices for SF delivery
-MINOR_CHANGE added vtb91sf variant for SF Timebox 9:1 builds
-MINOR_CHANGE added vtb92sf variant for SF Timebox 9:2 builds
-
-
-version 2.4.2
-
-Defect Fixes:
-DPDEF133820 Raptor Rollout: EXPORTUNFROZEN processing incorrect in ARMV5 builds
-DPDEF132033 Raptor picks up the wrong bld.inf macros when building for RVCT 3.1
-DPDEF133772 SBSv2: console log includes some winscw warnings that should be suppressed
-
-
-version 2.4.1
-
-Defect Fixes:
-DPDEF133639 Raptor Rollout:TEF test server doesn't start under SBSv2 - OK with abld
-DEF133255 [System Build]: Error in compiling NaviEngine Unistore on ARMV7 M04816 vFuture
-DPDEF127973 Freeze fails with SBSv2 under some environments
-
-
-version 2.4.0
-
-New Features:
-DS.1475 Pluggable Log Summariser
-DS.1476 Use FLMs from the source tree  
-
-Defect Fixes:
-DPDEF133417 SBSv2: tmp mounting errors on startup
-
-
-version 2.3.3
-
-Defect Fixes:
-DPDEF130261 sbs does not support explicit option to version keyword
-DPDEF130598 sbs does not provide debug and nodebug variants
-DPDEF131630 Raptor smoke tests break when EPOCROOT=\ on Windows
-DPDEF132898 no TEM nbl2.lib dependencies for armv7
-DPDEF133035 SBSv2 - Tools2 build does not include -m32 option.  Stlport flm also doesn't.
-DPDEF133176 SBSv2 ignores compillation error for "unidentified identifier" for winscw build
-
-
-version 2.3.2
-
-Other Changes:
-MINOR_CHANGE added vtb92 variant for Timebox 9:2 builds
-
-
-version 2.3.1
-
-Defect Fixes:
-DPDEF132374 SBSv2: Directory creation can fail leading to build errors
-DPDEF132070 SBSv2: stlport 5.2 build fails - library generated to wrong directory
-DPDEF128378 SBSv2 help for global targets only shown when a target is given
-DPDEF129634 ALWAYS_BUILD_AS_ARM does not suppress __MARM_THUMB__ with SBSv2
-
-
-version 2.3.0
-
-New Features:
-DS.1424 Support for ARMV5SMP platform  
-
-Defect Fixes:
-DPDEF129804 SBSv2 crashes when there are double \\ in prj_mmpfiles in bld.inf
-DPDEF130892 SBSv2: Reallyclean fails on TEM files
-DPDEF131619 SBSv2: ABIv1 .lib files aren't generated for -c armv5 -c armv5.smp
-DPDEF131637 SBSv2: stlport can fail to build under Cygwin - "/tmp no such directory"
-DPDEF131891 [System Build]: Errors in GT stage in Build M04774 vfuture
-
-
-version 2.2.9
-
-Defect Fixes:
-DPDEF129804 SBSv2 crashes when there are double \\ in prj_mmpfiles in bld.inf
-DPDEF131637 SBSv2: stlport can fail to build under Cygwin - "/tmp no such directory"
-DPDEF130892 SBSv2: Reallyclean fails on TEM files
-
-
-version 2.2.8
-
-Defect Fixes:
-DPDEF130569 .lib files for SSM targets build with different name compared to abld
-DPDEF130571 libxml2 component contains GCCXML build errors
-DPDEF131312 SBSv2 - DEBUGGABLE_UDEBONLY not supported by SBSv2 (Raptor)
-
-
-version 2.2.7
-
-Defect Fixes:
-DPDEF130533 SBSv2 fails to run when installed from SITK
-DPDEF130452 Some rcomp warnings need to be disabled
-DPDEF130286 SBSv2: sbs freezes during CLEAN and REALLYCLEAN operations.
-DPDEF127973 Freeze fails with SBSv2 under some environments
-DPDEF128455 Error during freeze with SBSv2
-DPDEF127149 SBSv2 TEM/extension makefile build doesn't support the .savespace variant
-
-
-version 2.2.6
-
-Defect Fixes:
-DPDEF130008 SBSv2 should recognize these new keywords: SMPSAFE, PAGEDCODE, PAGEDDATA, UN...
-DPDEF127887 Current directory wrong when executing extension makefiles in SBSv2
-DPDEF128915 CCheckEnv ERROR: CBRPatch: Absent file
-DPDEF127675 Raptor does not process stringtables correctly when HEADERONLY is on
-DPDEF127878 give wrong mmp filename for -p option should cause error in SBSv2
-
-Other Changes:
-Uses cygwin instead of msys for improved stability.
-Includes python 2.5.2 instead of using py2exe.
-
-
-version 2.2.5
-
-Defect Fixes:
-DEF127329 OMAP H4 Unistore2 Failure in Raptor 9.5 GT build
-DPDEF128632 SBSv2 : bld.inf ':zip' exports don't maintain timestamps, with an e32 impact
-DPDEF127399 SBSv2 -p <filename>.mmp options also builds .mk files
-
-
-version 2.2.4
-
-Defect Fixes:
-DPDEF129187 SBSv2: ABIv1 .lib files are required (again)
-
-
-version 2.2.3
-
-Defect Fixes:
-DPDEF128916 C Standard Library failed on cia2cpp2o armv5 with 1
-DPDEF128503 sbs 2.2.0 produce malformed xml log on Linux with pvmgmake
-DPDEF127604 SIS registry panics at startup on emulator if SWI is built with SBS
-DPDEF128690 SBSv2 generates error when using emake on REALLYCLEAN target
-
-Other Changes:
-MINOR_CHANGE log summariser updated to deal with errors starting "make.exe: ***"
-
-
-version 2.2.2
-
-Defect Fixes:
-DPDEF127497 SBSv2 does not clean when -k or other switch is used with abld wrapper
-DPDEF127829 'cannot open Meta file' warning with SBSv2
-DPDEF127371 abld -v not working correctly through sbsv2
-DPDEF127555 SBSv2 doesn't do "romfile"
-
-Other Changes:
-MINOR_CHANGE made the default number of jobs 4
-
-
-version 2.2.1
-
-Defect Fixes:
-DPDEF128498 SBS creates paths with extra slashes which can cause problems
-
-Other Changes:
-MINOR_CHANGE Removed temporary ABIv1 .lib generation
-MINOR_CHANGE Added monty test data to the test folder
-
-
-version 2.2.0
-
-New Features:
-DS.1347 SBSv2 Compiler Selection  
-DS.1348 SBSv2 allow mixed slashes
-
-Defect Fixes:
-DPDEF127904	SBSv2 : recent installdefaultcommdb has broken the 9.4 build
-DPDEF128022	SBSv2: Unrecognised Keyword ['romtarget  <some_file>.dll'] warnings
-DPDEF127815	SBSv2: PAGED and EPOCCALLDLLENTRYPOINTS keywords not supported
-DPDEF127890	SBSv2:  TARGETPATH in mmps (also resources, bitmaps) must cope with backslashes
-DPDEF128229 SBSv2: some command invocations can fail, but could be "re-tried"
-
-
-version 2.1.10
-
-Defect Fixes:
-DPDEF126662	Intermittent networking_dhcp compilation failure in Raptor build GT phase
-DPDEF127799	SBSv2: zip and unzip commands not found in some builds
-DPDEF127665	ARMV7 libraries have wrong link order in Raptor
-
-
-version 2.1.9
-
-Defect Fixes:
-DPDEF127498	SBSv2: importlibversioned_abiv1 intermittently fails in ARMV5 builds
-DPDEF125483	CDB breaks due to Attribute values not matching expected values
-DPDEF126335	Intermittent GT errors due to "make" not being found on the PATH
-DPDEF127562	SBSv2 will not unzip the same file into more than one location
-DPDEF127626	SBSv2: sed version on windows is out of date
-
-
-version 2.1.8
-
-Defect Fixes:
-DPDEF125478	CDB breaks caused by file path/name mismatch
-DPDEF125145	Incorrect file access permissions for sbs v2.0.14 in Linux distribution
-DPDEF126126	Intermittent "Segmentation fault" error in Raptor GT phase
-DPDEF124836	SBSv2 cannot build just a single .mmp file from a bld.inf file
-DPDEF126675	Performance regression in SBSv2 python frontend caused by regex usage,
-DPDEF126790	groupin10 is not used in artarget_func
-DPDEF125639	TEM variables are reported incorrectly when building TEM for ARMV7
-DPDEF124273	abld help is ugly and hard to read
-DPDEF126614	"Virtual memory exhausted. Stop" error when building with SBSV2
-
-
-version 2.1.7
-
-Defect Fixes:
-DPDEF124290 SBS -e pvmgmake -j 12 on Linux produces malformed xml log files
-DPDEF126241	SBSv2 : SECURE_DATA error when building uiklaf toolkit in TechView
-DPDEF126328	Performance regression and related excessive memory usage in daily Raptor builds
-
-
-version 2.1.6
-
-Defect Fixes:
-DPDEF125740	SBSv2: Builds can hang during the GT stage in Windows builds when using "-j x"
-DPDEF125145	Incorrect file access permissions for sbs v2.0.14 in Linux distribution
-
-
-version 2.1.5
-
-Defect Fixes:
-DPDEF125812	There is no user created init.xml configuration file
-
-
-version 2.1.4
-
-Defect Fixes:
-DPDEF124680 Raptor builds hang  at "tools2" compilation phase
-DPDEF125304 Raptor crashes when running abld
-
-
-version 2.1.3
-
-Defect Fixes:
-DPDEF125394 sbs_2.1.0_(RC1) Building complete OS gives armasm errors on Windows
-DPDEF122556 GT0367: CLEANEXPORT target is not cleaning files with a space in them
-DPDEF124691 Raptor should ignore the new SMPSAFE keyword
-DPDEF125031 SBSv2 Stringtable build fails when EXPORTPATH specified
-
-
-version 2.1.2
-
-Change Requests:
-CR1413 Support for different toolchains to be called by SBSv1 and SBSv2
-
-
-version 2.1.1	
-
-Defect Fixes:
-DEF124748 GCCXML errors in Raptor related to missing arm lib files
-DEF124756 Raptor build : Orphan files reported in CBR phase
-DEF124758 Raptor build CBR errors due to missing ".a" files
-DEF124573 CDB breaks in Raptor build due to missing header,dll and lib files
-
-
-version 2.1.0
-
-Change Requests:
-CR1479 Add Armv7 support into SBSv2
-
-Defect Fixes:
-DEF124543 Raptor does not handle the STDCPP keyword correctly
-DEF124515 GT0367: 'bldmake plat' should now show ARMV7
-
-
-version 2.0.14
-
-Defect Fixes:
-DEF124705 CBR errors in raptor builds due to missing rpp files
-DEF120328 SBS v2.0 configuration files cannot be validated
-INC124096 Long list of MMP macros causes crashdump with .s files
-DEF124702 GT0367: Semaphores need altering to correct possible hangs (on Linux)
-
-
-version 2.0.13
-
-Defect Fixes:
-DEF123653 SBS -j 16 on Windows produces malformed xml log files
-
-
-version 2.0.12
-
-Defect Fixes:
-DEF123987 Raptor does not build a lot of .lib files for ARMV5
-DEF123981 SBSv2 doesn't generate DSO when EXPORTUNFROZEN is specified.
-
-
-version 2.0.11
-
-Defect Fixes:
-DEF123988 SBSv2 does not produce rpp files
-DEF123766 SBSv2 log output does not match the specification
-DEF122781 GT0367: 'bldmake bldfiles' output not going to stdout
-DEF122885 GT0367: Need to stop sbs -abld functioning on Linux
-DEF123354 GT0367: Incorrect output if the number of jobs provided is invalid
-
-
-version 2.0.10
-
-Defect Fixes:
-DEF123984 SBSv2 generates more warnings than abld
-DEF124139 GT0367: SBS causes a Python Traceback when a system_definition.xml error occurs
-DEF123601 SBSv2 : Python traceback error is reported when try to build systemtest code
-DEF123916 SBSv2 : "tools" build warns about overrides when "OPTION MSVC /w" in .mmp files
-
-
-version 2.0.9
-
-Defect Fixes:
-PDEF124028 .GXP files not getting created when built for GCCXML target
-DEF123653 SBS -j 16 on Windows produces malformed xml log files
-DEF123586 dso file is not remade when def file changes
-DEF122541 SBSv2 -what should report resource files
-DEF123265 Incorrect file access permissions for sbs v2.0.7 in Linux dist
-DEF123317 SBSv2 -what got error for whatexports if too much exports
-DEF123439 SBSv2 : Exports not performed in total before .mmp processing in sysdef builds
-DEF123552 STLport doesn't build with Raptor on Linux
-DEF123260 GT0367: Circular references in config files not handled
-
-
-version 2.0.8
-
-Defect Fixes:
-DEF122930 SBSv2:Target type exexp giving errors while building for winscw
-DEF123028 Raptor generating double slashes in command files
-DEF123048 SBSv2: build with -k (keep-going) stops when export makefile has a failure.
-DEF123069 False 'missing mmp file' errors reported by SBSv2
-DEF122472 SBSv2 doesn't report content of unpacked zip files
-DEF122534 SBSv2 -what should not report .sym files
-DEF123181 SBSv2: Failure of one export in python aborts remaining exports for bld.inf
-DEF123289 SBSv2 : Netcards doesn't build for "tools" in an SBSv2 build
-DEF123418 SBSV2: stlport build can fail with "no rule to make target"
-DEF123084 SBSv2: exits with an exception if -c option specifies non-existent configuration
-INC122876 Electric Accelerator build fails with Raptor
-
-
-version 2.0.7
-
-Defect Fixes:
-DEF122784 Large MMP files and GNUMAKEFILE causes shell to crash
-DEF122760 Problems with bmconv command files preventing bitmap generation?
-DEF122803 SBSv2 - Freeze doesnt work properly for OE target types
-DEF122833 SBSV2 Performance is poor with -j16 using the GNU Make engine
-DEF122535 GT0367: Invalid system_definition.xml causes SBSv2 layering crash
-DEF122570 SBSv2 : certain "-m" values cause a crash at makefile generation
-DEF122604 Errors in GT only build using sbsv2 on Windows
-DEF122796 Wrong default value for PVMGMAKE in make.xml
-DEF122783 SBSv2 WINSCW builds can produce incorrectly linked executables under emake
-DEF122785 log summariser crashes if errors contain % characters
-DEF122870 SBSv2 assembling .s files fails.
-DEF120473 Enable Windows and Linux Tools to Cohabit
-DEF121826 Pre-include HRH file directory from variant.cfg fails for template extension mak
-DEF121907 Raptor crashes when exporting zip file that already exists
-DEF122523 SBSv2 Logging output affected by bash version on Linux
-DEF122788 SBSv2: We don't ensure correct version of Make for TEMs and for use in FLMs
-
-
-version 2.0.6
-
-The first release of SBSv2 in the SITK.
-
--- a/sbsv2/raptor/bin/sbs.bat	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/bin/sbs.bat	Fri Apr 16 19:32:39 2010 +0100
@@ -15,66 +15,7 @@
 @rem
 
 @SETLOCAL
-@SET HOSTPLATFORM=win 32
-@SET HOSTPLATFORM_DIR=win32
-
-
-@REM Automatically find SBS_HOME if it is not set
-@IF NOT "%SBS_HOME%"==""  goto foundhome
-@SET RAPTORBINDIR=%~dp0
-@SET WD=%cd%
-@cd /d %RAPTORBINDIR%\..
-@SET SBS_HOME=%cd%
-@cd /d %WD%
-:foundhome 
-
-@REM The python and PYTHONPATH used by Raptor are determined by, in order of precedence:
-@REM 1. the SBS_PYTHON and SBS_PYTHONPATH environment variables (if set)
-@REM 2. the python shipped locally with Raptor (if present)
-@REM 3. the python on the system PATH and the PYTHONPATH set in the system environment
-
-@SET __LOCAL_PYTHON__=%SBS_HOME%\win32\python264\python.exe
-@IF NOT "%SBS_PYTHON%"=="" GOTO sbspython
-@IF EXIST %__LOCAL_PYTHON__% GOTO localpython
-@SET __PYTHON__=python.exe
-@GOTO sbspythonpath
-
-:sbspython
-@SET __PYTHON__=%SBS_PYTHON%
-@GOTO sbspythonpath
-
-:localpython
-@SET __PYTHON__=%__LOCAL_PYTHON__%
-@SET SBS_PYTHON=%__PYTHON__%
-@SET PYTHONPATH=
-
-:sbspythonpath
-@IF NOT "%SBS_PYTHONPATH%"=="" SET PYTHONPATH=%SBS_PYTHONPATH%
-
-@REM Use the mingw set by the environment if possible
-@SET __MINGW__=%SBS_MINGW%
-@IF "%__MINGW__%"=="" SET __MINGW__=%SBS_HOME%\win32\mingw
-
-@REM Use the cygwin set by the environment if possible
-@SET __CYGWIN__=%SBS_CYGWIN%
-@IF "%__CYGWIN__%"=="" SET __CYGWIN__=%SBS_HOME%\win32\cygwin
-
-@REM add to the search path
-@REM (make sure that we don't get into trouble if there are Path and PATH variables)
-@SET PATH_TEMP=%__MINGW__%\bin;%__CYGWIN__%\bin;%SBS_HOME%\win32\bin;%PATH%
-@SET PATH=
-@SET PATH=%PATH_TEMP%
-@SET PATH_TEMP=
-
-@REM Make sure that /tmp is not set incorrectly for sbs
-@umount -u /tmp >NUL  2>NUL
-@mount -u %TEMP% /tmp >NUL 2>NUL
-@umount -u / >NUL  2>NUL
-@mount -u %__CYGWIN__% / >NUL 2>NUL
-
-@REM Tell CYGWIN not to map unix security attributes to windows to
-@REM prevent raptor from potentially creating read-only files:
-@SET CYGWIN=nontsec nosmbntsec
+@CALL "%~dp0sbs_env.bat"
 
 @REM Run Raptor with all the arguments.
 @%__PYTHON__% %SBS_HOME%\python\raptor_start.py %*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/sbs_env.bat	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,83 @@
+@REM
+@REM Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM
+@REM Contributors:
+@REM
+@REM Description: 
+@REM
+
+@SET HOSTPLATFORM=win 32
+@SET HOSTPLATFORM_DIR=win32
+
+@REM Automatically find SBS_HOME if it is not set
+@IF NOT "%SBS_HOME%"=="" GOTO foundhome
+@SET RAPTORBINDIR=%~dp0
+@SET WD=%CD%
+@CD /d %RAPTORBINDIR%\..
+@SET SBS_HOME=%CD%
+@CD /d %WD%
+:foundhome 
+
+@REM The python and PYTHONPATH used by Raptor are determined by, in order of precedence:
+@REM 1. the SBS_PYTHON and SBS_PYTHONPATH environment variables (if set)
+@REM 2. the python shipped locally with Raptor (if present)
+@REM 3. the python on the system PATH and the PYTHONPATH set in the system environment
+
+@SET __LOCAL_PYTHON__=%SBS_HOME%\win32\python264\python.exe
+@IF NOT "%SBS_PYTHON%"=="" GOTO sbspython
+@IF EXIST %__LOCAL_PYTHON__% GOTO localpython
+@SET __PYTHON__=python.exe
+@GOTO sbspythonpath
+
+:sbspython
+@SET __PYTHON__=%SBS_PYTHON%
+@GOTO sbspythonpath
+
+:localpython
+@SET __PYTHON__=%__LOCAL_PYTHON__%
+@SET SBS_PYTHON=%__PYTHON__%
+@SET PYTHONPATH=
+
+:sbspythonpath
+@IF NOT "%SBS_PYTHONPATH%"=="" SET PYTHONPATH=%SBS_PYTHONPATH%
+
+@REM Use the mingw set by the environment if possible
+@SET __MINGW__=%SBS_MINGW%
+@IF "%__MINGW__%"=="" SET __MINGW__=%SBS_HOME%\win32\mingw
+
+@REM Tell CYGWIN not to map unix security attributes to windows to
+@REM prevent raptor from potentially creating read-only files.
+@REM Assume Cygwin 1.5 CLI.
+@SET __MOUNTOPTIONS__=-u
+@SET __UMOUNTOPTIONS__=-u
+@SET CYGWIN=nontsec nosmbntsec
+
+@REM If SBS_CYGWIN17 is set, we are using Cygwin 1.7, so change the mount/umount 
+@REM options to the 1.7 CLI and set SBS_CYGWIN to the value of SBS_CYGWIN17
+@IF NOT "%SBS_CYGWIN17%" == "" SET CYGWIN=nodosfilewarning && SET "SBS_CYGWIN=%SBS_CYGWIN17%" && SET __MOUNTOPTIONS__=-o noacl -o user && SET __UMOUNTOPTIONS__=
+
+@REM Use the Cygwin set by the environment (from SBS_CYGWIN or SBS_CYGWIN17) if possible
+@SET __CYGWIN__=%SBS_CYGWIN%
+@IF "%__CYGWIN__%"=="" SET __CYGWIN__=%SBS_HOME%\win32\cygwin
+
+@REM Add to the search path
+@REM (make sure that we don't get into trouble if there are Path and PATH variables)
+@SET PATH_TEMP=%__MINGW__%\bin;%__CYGWIN__%\bin;%SBS_HOME%\win32\bin;%PATH%
+@SET PATH=
+@SET PATH=%PATH_TEMP%
+@SET PATH_TEMP=
+
+@REM Make sure that /tmp is not set incorrectly for sbs. 
+@umount %__UMOUNTOPTIONS__% /tmp >NUL  2>NUL
+@mount %__MOUNTOPTIONS__% %TEMP% /tmp >NUL 2>NUL
+@umount %__UMOUNTOPTIONS__% / >NUL  2>NUL
+@mount %__MOUNTOPTIONS__% %__CYGWIN__% / >NUL 2>NUL
+
--- a/sbsv2/raptor/bin/sbs_filter.bat	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/bin/sbs_filter.bat	Fri Apr 16 19:32:39 2010 +0100
@@ -14,31 +14,8 @@
 @rem Description: 
 @rem
 
-@REM Automatically find SBS_HOME if it is not set
-@IF NOT "%SBS_HOME%"==""  goto foundhome
-@SET RAPTORBINDIR=%~dp0
-@SET WD=%cd%
-@cd %RAPTORBINDIR%\..
-@SET SBS_HOME=%cd%
-@cd %WD%
-:foundhome 
-
-@REM Use the cygwin set by the environment if possible
-@SET __CYGWIN__=%SBS_CYGWIN%
-@IF "%__CYGWIN__%"=="" SET __CYGWIN__=%SBS_HOME%\win32\cygwin
-
-@REM add to the search path
-@SET PATH=%__CYGWIN__%\bin;%PATH%
-
-@REM Make sure that /tmp is not set incorrectly for sbs
-@umount -u /tmp >NUL  2>NUL
-@mount -u %TEMP% /tmp >NUL 2>NUL
-@umount -u / >NUL  2>NUL
-@mount -u %__CYGWIN__% / >NUL 2>NUL
-
-@REM Tell CYGWIN not to map unix security attributes to windows to
-@REM prevent raptor from potentially creating read-only files:
-@set CYGWIN=nontsec nosmbntsec
+@SETLOCAL
+@CALL "%~dp0\sbs_env.bat"
 
 @REM Run with all the arguments.
 @bash %SBS_HOME%\bin\sbs_filter %*
--- a/sbsv2/raptor/group/bld.inf	Wed Apr 14 18:01:20 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-/*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-PRJ_PLATFORMS
-TOOLS TOOLS2
-
-PRJ_EXPORTS
-#include "exports.inf"
-
--- a/sbsv2/raptor/group/checkexports.sh	Wed Apr 14 18:01:20 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-for dir in . cpp-raptor cygwin-1.5.25 mingw-5.1.4 python-2.5.2; do
-	echo testing exports.inf in $dir
-	(cd $dir; ./exports.sh2; sort exports.inf > t1; sort exports.inf2 > t2; diff t1 t2)
-done
-
--- a/sbsv2/raptor/group/exports.inf	Wed Apr 14 18:01:20 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,223 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-../RELEASE-NOTES.txt /tools/sbs/RELEASE-NOTES.txt
-../bin/sbs /tools/sbs/bin/sbs
-../bin/fixmeta.py /tools/sbs/bin/fixmeta.py
-../bin/codetest_osbuild.sh /tools/sbs/bin/codetest_osbuild.sh
-../bin/countbinaries.sh /tools/sbs/bin/countbinaries.sh
-../bin/gethost.sh /tools/sbs/bin/gethost.sh
-../bin/failedstats.py /tools/sbs/bin/failedstats.py
-../bin/sbs.bat /tools/sbs/bin/sbs.bat
-../bin/unsplitdirs.py /tools/sbs/bin/unsplitdirs.py
-../bin/buildstats.py /tools/sbs/bin/buildstats.py
-../bin/speedtest_osbuild.sh /tools/sbs/bin/speedtest_osbuild.sh
-../bin/sbsv2cache.py /tools/sbs/bin/sbsv2cache.py
-../bin/whatsource.py /tools/sbs/bin/whatsource.py
-../bin/oby2linux.py /tools/sbs/bin/oby2linux.py
-../bin/createrfifile.pl /tools/sbs/bin/createrfifile.pl
-../bin/vartoxml.py /tools/sbs/bin/vartoxml.py
-../bin/readme.txt /tools/sbs/bin/readme.txt
-../bin/squashlog.py /tools/sbs/bin/squashlog.py
-../bin/statcollate.py /tools/sbs/bin/statcollate.py
-../bin/createvmap.py /tools/sbs/bin/createvmap.py
-../bin/raptorlog.py /tools/sbs/bin/raptorlog.py
-../bin/osbuild.sh /tools/sbs/bin/osbuild.sh
-../bin/setup_user.sh /tools/sbs/bin/setup_user.sh
-../bin/msvcr71.dll /tools/sbs/bin/msvcr71.dll
-../bin/install_raptor.sh /tools/sbs/bin/install_raptor.sh
-../bin/mkgetfailed.py /tools/sbs/bin/mkgetfailed.py
-../examples/os_properties.xml /tools/sbs/examples/os_properties.xml
-../examples/sbs_init.xml /tools/sbs/examples/sbs_init.xml
-../lib/flm/e32abiv2stdexe.flm /tools/sbs/lib/flm/e32abiv2stdexe.flm
-../lib/flm/user/default.flm_ex /tools/sbs/lib/flm/user/default.flm_ex
-../lib/flm/user/globals.mk_ex /tools/sbs/lib/flm/user/globals.mk_ex
-../lib/flm/e32abiv2dll.flm /tools/sbs/lib/flm/e32abiv2dll.flm
-../lib/flm/tracecompiler.mk /tools/sbs/lib/flm/tracecompiler.mk
-../lib/flm/win32exe.flm /tools/sbs/lib/flm/win32exe.flm
-../lib/flm/template_ext.flm /tools/sbs/lib/flm/template_ext.flm
-../lib/flm/e32abiv2ani.flm /tools/sbs/lib/flm/e32abiv2ani.flm
-../lib/flm/converged-comms/createcommdbs.flm /tools/sbs/lib/flm/converged-comms/createcommdbs.flm
-../lib/flm/converged-comms/installdefaultcommdb.flm /tools/sbs/lib/flm/converged-comms/installdefaultcommdb.flm
-../lib/flm/win32plugin.flm /tools/sbs/lib/flm/win32plugin.flm
-../lib/flm/win32klib.flm /tools/sbs/lib/flm/win32klib.flm
-../lib/flm/extensions.xml /tools/sbs/lib/flm/extensions.xml
-../lib/flm/stack.mk /tools/sbs/lib/flm/stack.mk
-../lib/flm/globals.mk /tools/sbs/lib/flm/globals.mk
-../lib/flm/win32stdexe.flm /tools/sbs/lib/flm/win32stdexe.flm
-../lib/flm/e32abiv2lib.flm /tools/sbs/lib/flm/e32abiv2lib.flm
-../lib/flm/win32resource.flm /tools/sbs/lib/flm/win32resource.flm
-../lib/flm/config/default.flm /tools/sbs/lib/flm/config/default.flm
-../lib/flm/win32lib.flm /tools/sbs/lib/flm/win32lib.flm
-../lib/flm/null.flm /tools/sbs/lib/flm/null.flm
-../lib/flm/tools/test_command_diff.sh /tools/sbs/lib/flm/tools/test_command_diff.sh
-../lib/flm/tools/stlport.flm /tools/sbs/lib/flm/tools/stlport.flm
-../lib/flm/tools/buildstubsis.flm /tools/sbs/lib/flm/tools/buildstubsis.flm
-../lib/flm/msvctools.xml /tools/sbs/lib/flm/msvctools.xml
-../lib/flm/tools2lib.flm /tools/sbs/lib/flm/tools2lib.flm
-../lib/flm/win32ldd.flm /tools/sbs/lib/flm/win32ldd.flm
-../lib/flm/tools.xml /tools/sbs/lib/flm/tools.xml
-../lib/flm/metaflm.mk /tools/sbs/lib/flm/metaflm.mk
-../lib/flm/e32abiv2ldd.flm /tools/sbs/lib/flm/e32abiv2ldd.flm
-../lib/flm/e32abiv2pdl.flm /tools/sbs/lib/flm/e32abiv2pdl.flm
-../lib/flm/e32abiv2stdlib.flm /tools/sbs/lib/flm/e32abiv2stdlib.flm
-../lib/flm/config.xml /tools/sbs/lib/flm/config.xml
-../lib/flm/win32stddll.flm /tools/sbs/lib/flm/win32stddll.flm
-../lib/flm/gccxmlresource.flm /tools/sbs/lib/flm/gccxmlresource.flm
-../lib/flm/e32abiv2textnotifier2.flm /tools/sbs/lib/flm/e32abiv2textnotifier2.flm
-../lib/flm/e32abiv2implib.flm /tools/sbs/lib/flm/e32abiv2implib.flm
-../lib/flm/e32abiv2exe.flm /tools/sbs/lib/flm/e32abiv2exe.flm
-../lib/flm/win32pdl.flm /tools/sbs/lib/flm/win32pdl.flm
-../lib/flm/win32.flm /tools/sbs/lib/flm/win32.flm
-../lib/flm/base.xml /tools/sbs/lib/flm/base.xml
-../lib/flm/grouping.flm /tools/sbs/lib/flm/grouping.flm
-../lib/flm/e32abiv2.flm /tools/sbs/lib/flm/e32abiv2.flm
-../lib/flm/e32abiv2exexp.flm /tools/sbs/lib/flm/e32abiv2exexp.flm
-../lib/flm/e32abiv2defaults.mk /tools/sbs/lib/flm/e32abiv2defaults.mk
-../lib/flm/e32abiv2fsy.flm /tools/sbs/lib/flm/e32abiv2fsy.flm
-../lib/flm/final.mk /tools/sbs/lib/flm/final.mk
-../lib/flm/none.flm /tools/sbs/lib/flm/none.flm
-../lib/flm/analysis.xml /tools/sbs/lib/flm/analysis.xml
-../lib/flm/e32abiv2var2.flm /tools/sbs/lib/flm/e32abiv2var2.flm
-../lib/flm/msvctools.flm /tools/sbs/lib/flm/msvctools.flm
-../lib/flm/win32kdll.flm /tools/sbs/lib/flm/win32kdll.flm
-../lib/flm/win32ani.flm /tools/sbs/lib/flm/win32ani.flm
-../lib/flm/e32abiv2plugin.flm /tools/sbs/lib/flm/e32abiv2plugin.flm
-../lib/flm/win32bitmap.flm /tools/sbs/lib/flm/win32bitmap.flm
-../lib/flm/tools2common.flm /tools/sbs/lib/flm/tools2common.flm
-../lib/flm/win32fsy.flm /tools/sbs/lib/flm/win32fsy.flm
-../lib/flm/readme.txt /tools/sbs/lib/flm/readme.txt
-../lib/flm/e32abiv2kext.flm /tools/sbs/lib/flm/e32abiv2kext.flm
-../lib/flm/e32abiv2stddll.flm /tools/sbs/lib/flm/e32abiv2stddll.flm
-../lib/flm/win32exexp.flm /tools/sbs/lib/flm/win32exexp.flm
-../lib/flm/stringtable.flm /tools/sbs/lib/flm/stringtable.flm
-../lib/flm/utils/utility.xml /tools/sbs/lib/flm/utils/utility.xml
-../lib/flm/utils/prebuilt.flm /tools/sbs/lib/flm/utils/prebuilt.flm
-../lib/flm/utils/copydir.flm /tools/sbs/lib/flm/utils/copydir.flm
-../lib/flm/win32pdd.flm /tools/sbs/lib/flm/win32pdd.flm
-../lib/flm/taggedrules.mk /tools/sbs/lib/flm/taggedrules.mk
-../lib/flm/booleanlogic.mk /tools/sbs/lib/flm/booleanlogic.mk
-../lib/flm/emulator.xml /tools/sbs/lib/flm/emulator.xml
-../lib/flm/win32kext.flm /tools/sbs/lib/flm/win32kext.flm
-../lib/flm/test/exeabiv2_2/test.cpp /tools/sbs/lib/flm/test/exeabiv2_2/test.cpp
-../lib/flm/test/exeabiv2_2/test_function.cpp /tools/sbs/lib/flm/test/exeabiv2_2/test_function.cpp
-../lib/flm/test/exeabiv2_2/exeabiv2_2.mk /tools/sbs/lib/flm/test/exeabiv2_2/exeabiv2_2.mk
-../lib/flm/test/templateext/temex.mk /tools/sbs/lib/flm/test/templateext/temex.mk
-../lib/flm/test/templateext/Makefile /tools/sbs/lib/flm/test/templateext/Makefile
-../lib/flm/test/Makefile /tools/sbs/lib/flm/test/Makefile
-../lib/flm/test/exeabiv2_4/test.cpp /tools/sbs/lib/flm/test/exeabiv2_4/test.cpp
-../lib/flm/test/exeabiv2_4/exeabiv2_4.mk /tools/sbs/lib/flm/test/exeabiv2_4/exeabiv2_4.mk
-../lib/flm/test/exeabiv2_4/test_big.cpp /tools/sbs/lib/flm/test/exeabiv2_4/test_big.cpp
-../lib/flm/test/flmtests.mk /tools/sbs/lib/flm/test/flmtests.mk
-../lib/flm/test/ciaabiv2_1/uc_exe.cia /tools/sbs/lib/flm/test/ciaabiv2_1/uc_exe.cia
-../lib/flm/test/ciaabiv2_1/uc_exe.cpp /tools/sbs/lib/flm/test/ciaabiv2_1/uc_exe.cpp
-../lib/flm/test/ciaabiv2_1/ciaabiv2_1.mk /tools/sbs/lib/flm/test/ciaabiv2_1/ciaabiv2_1.mk
-../lib/flm/test/export1/Makefile /tools/sbs/lib/flm/test/export1/Makefile
-../lib/flm/test/export1/t1e.h /tools/sbs/lib/flm/test/export1/t1e.h
-../lib/flm/test/export1/t4e.h /tools/sbs/lib/flm/test/export1/t4e.h
-../lib/flm/test/export1/t2e.h /tools/sbs/lib/flm/test/export1/t2e.h
-../lib/flm/test/export1/t3e.h /tools/sbs/lib/flm/test/export1/t3e.h
-../lib/flm/test/dllabiv2_1/test.cpp /tools/sbs/lib/flm/test/dllabiv2_1/test.cpp
-../lib/flm/test/dllabiv2_1/dllabiv2_1.mk /tools/sbs/lib/flm/test/dllabiv2_1/dllabiv2_1.mk
-../lib/flm/test/raptorglue/raptorglue.mk /tools/sbs/lib/flm/test/raptorglue/raptorglue.mk
-../lib/flm/test/dllbasictests.mk /tools/sbs/lib/flm/test/dllbasictests.mk
-../lib/flm/test/exeabiv2_1/test.cpp /tools/sbs/lib/flm/test/exeabiv2_1/test.cpp
-../lib/flm/test/exeabiv2_1/exeabiv2_1.mk /tools/sbs/lib/flm/test/exeabiv2_1/exeabiv2_1.mk
-../lib/flm/test/dllabiv2_defaults.mk /tools/sbs/lib/flm/test/dllabiv2_defaults.mk
-../lib/flm/test/exeperftests.mk /tools/sbs/lib/flm/test/exeperftests.mk
-../lib/flm/test/ciatests.mk /tools/sbs/lib/flm/test/ciatests.mk
-../lib/flm/test/environment/pvm/pvmtest.mk /tools/sbs/lib/flm/test/environment/pvm/pvmtest.mk
-../lib/flm/test/environment/make/test_variable_restore.mk /tools/sbs/lib/flm/test/environment/make/test_variable_restore.mk
-../lib/flm/test/exebasictests.mk /tools/sbs/lib/flm/test/exebasictests.mk
-../lib/flm/test/exeabiv2_defaults.mk /tools/sbs/lib/flm/test/exeabiv2_defaults.mk
-../lib/flm/test/exeabiv2_3/exeabiv2_3.mk /tools/sbs/lib/flm/test/exeabiv2_3/exeabiv2_3.mk
-../lib/flm/test/exeabiv2_3/test_big.cpp /tools/sbs/lib/flm/test/exeabiv2_3/test_big.cpp
-../lib/flm/win32stdlib.flm /tools/sbs/lib/flm/win32stdlib.flm
-../lib/flm/win32var2.flm /tools/sbs/lib/flm/win32var2.flm
-../lib/flm/win32implib.flm /tools/sbs/lib/flm/win32implib.flm
-../lib/flm/bitmap.flm /tools/sbs/lib/flm/bitmap.flm
-../lib/flm/build.flm /tools/sbs/lib/flm/build.flm
-../lib/flm/build.xml /tools/sbs/lib/flm/build.xml
-../lib/flm/tools2exe.flm /tools/sbs/lib/flm/tools2exe.flm
-../lib/flm/e32abiv2klib.flm /tools/sbs/lib/flm/e32abiv2klib.flm
-../lib/flm/standard.xml /tools/sbs/lib/flm/standard.xml
-../lib/flm/win32var.flm /tools/sbs/lib/flm/win32var.flm
-../lib/flm/e32abiv2pdd.flm /tools/sbs/lib/flm/e32abiv2pdd.flm
-../lib/flm/e32abiv2none.flm /tools/sbs/lib/flm/e32abiv2none.flm
-../lib/flm/romfile.mk /tools/sbs/lib/flm/romfile.mk
-../lib/flm/win32textnotifier2.flm /tools/sbs/lib/flm/win32textnotifier2.flm
-../lib/flm/resource.flm /tools/sbs/lib/flm/resource.flm
-../lib/flm/flmtools.mk /tools/sbs/lib/flm/flmtools.mk
-../lib/flm/gnumakefile.flm /tools/sbs/lib/flm/gnumakefile.flm
-../lib/flm/e32abiv2kdll.flm /tools/sbs/lib/flm/e32abiv2kdll.flm
-../lib/flm/e32abiv2var.flm /tools/sbs/lib/flm/e32abiv2var.flm
-../lib/flm/win32dll.flm /tools/sbs/lib/flm/win32dll.flm
-../lib/flm/gccxml.flm /tools/sbs/lib/flm/gccxml.flm
-../lib/flm/e32postlink.mk /tools/sbs/lib/flm/e32postlink.mk
-../lib/config/default.xml /tools/sbs/lib/config/default.xml
-../lib/config/build.xml /tools/sbs/lib/config/build.xml
-../lib/config/interfaces.xml /tools/sbs/lib/config/interfaces.xml
-../lib/config/gcc.xml /tools/sbs/lib/config/gcc.xml
-../lib/config/variants.xml /tools/sbs/lib/config/variants.xml
-../lib/config/coverity.xml /tools/sbs/lib/config/coverity.xml
-../lib/config/meta.xml /tools/sbs/lib/config/meta.xml
-../lib/config/locations.xml /tools/sbs/lib/config/locations.xml
-../lib/config/gccxml.xml /tools/sbs/lib/config/gccxml.xml
-../lib/config/carbide.xml /tools/sbs/lib/config/carbide.xml
-../lib/config/msvc.xml /tools/sbs/lib/config/msvc.xml
-../lib/config/make.xml /tools/sbs/lib/config/make.xml
-../lib/config/root.xml /tools/sbs/lib/config/root.xml
-../lib/config/winscw.xml /tools/sbs/lib/config/winscw.xml
-../lib/config/arm.xml /tools/sbs/lib/config/arm.xml
-../lib/config/gcce.xml /tools/sbs/lib/config/gcce.xml
-../lib/config/rvct.xml /tools/sbs/lib/config/rvct.xml
-../python/raptor_makefile.py /tools/sbs/python/raptor_makefile.py
-../python/filter_interface.py /tools/sbs/python/filter_interface.py
-../python/raptor_start.py /tools/sbs/python/raptor_start.py
-../python/pyparsing.py /tools/sbs/python/pyparsing.py
-../python/raptor_cli.py /tools/sbs/python/raptor_cli.py
-../python/raptor_cache.py /tools/sbs/python/raptor_cache.py
-../python/raptor_meta.py /tools/sbs/python/raptor_meta.py
-../python/raptor_xml.py /tools/sbs/python/raptor_xml.py
-../python/raptor_version.py /tools/sbs/python/raptor_version.py
-../python/generic_path.py /tools/sbs/python/generic_path.py
-../python/raptor_make.py /tools/sbs/python/raptor_make.py
-../python/plugins/filter_logfile.py /tools/sbs/python/plugins/filter_logfile.py
-../python/plugins/filter_terminal.py /tools/sbs/python/plugins/filter_terminal.py
-../python/plugins/filter_carbide.py /tools/sbs/python/plugins/filter_carbide.py
-../python/plugins/filter_what.py /tools/sbs/python/plugins/filter_what.py
-../python/plugins/dummyplugin.py /tools/sbs/python/plugins/dummyplugin.py
-../python/plugins/filter_clean.py /tools/sbs/python/plugins/filter_clean.py
-../python/plugins/filter_squashlog.py /tools/sbs/python/plugins/filter_squashlog.py
-../python/plugins/filter_checksource.py /tools/sbs/python/plugins/filter_checksource.py
-../python/plugins/filter_splitlog.py /tools/sbs/python/plugins/filter_splitlog.py
-../python/sbs_dist.py /tools/sbs/python/sbs_dist.py
-../python/raptor_utilities.py /tools/sbs/python/raptor_utilities.py
-../python/pluginbox.py /tools/sbs/python/pluginbox.py
-../python/dos2unix.py /tools/sbs/python/dos2unix.py
-../python/raptor_data.py /tools/sbs/python/raptor_data.py
-../python/filter_list.py /tools/sbs/python/filter_list.py
-../python/raptor.py /tools/sbs/python/raptor.py
-../python/mmpparser.py /tools/sbs/python/mmpparser.py
-../python/filter_utils.py /tools/sbs/python/filter_utils.py
-../schema/build/2_0.xsd /tools/sbs/schema/build/2_0.xsd
-../schema/build/log/1_0.xsd /tools/sbs/schema/build/log/1_0.xsd
-../schema/build/1_0.xsd /tools/sbs/schema/build/1_0.xsd
-../win32/bin/ransleep.exe /tools/sbs/win32/bin/ransleep.exe
-../win32/bin/sbs_descramble.exe /tools/sbs/win32/bin/sbs_descramble.exe
-../win32/bin/talonctl.exe /tools/sbs/win32/bin/talonctl.exe
-../win32/bin/talon.exe /tools/sbs/win32/bin/talon.exe
--- a/sbsv2/raptor/group/exports.sh	Wed Apr 14 18:01:20 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-# script to generate exports for this component
-
-# copy ../* to /tools/sbs
-
-find .. -maxdepth 1 -type f -not -name "distribution.policy*" -print | sed 's!\.\.\(.*\)!\.\.\1 /tools/sbs\1!' > exports.inf
-
-for i in bin lib python schema util; do
-    find ../$i -type f -not -name "distribution.policy*" -not -name "*.pyc" -print | sed 's!\.\.\(.*\)!\.\.\1 /tools/sbs\1!' >> exports.inf
-done
-
--- a/sbsv2/raptor/group/exports.sh2	Wed Apr 14 18:01:20 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-# script to generate exports for this component to compare with the existing exports.inf
-
-# copy ../* to /tools/sbs
-
-find .. -maxdepth 1 -type f -not -name "distribution.policy*" -print | sed 's!\.\.\(.*\)!\.\.\1 /tools/sbs\1!' > exports.inf2
-
-for i in bin examples lib python schema win32/bin; do
-    find ../$i -type f -not -name "distribution.policy*" -not -name "*.pyc" -print | sed 's!\.\.\(.*\)!\.\.\1 /tools/sbs\1!' >> exports.inf2
-done
-
--- a/sbsv2/raptor/group/raptor.mrp	Wed Apr 14 18:01:20 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-component dev_build_sbsv2_raptor
-
-
-source /src/tools/dev/build/sbsv2/raptor
-exports /src/tools/dev/build/sbsv2/raptor/group
-
-ipr T
-ipr B ../python/pyparsing.py
-
-notes_source release.txt
-
--- a/sbsv2/raptor/group/release.txt	Wed Apr 14 18:01:20 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-NOTESRC_RELEASER
-Symbian Software Ltd. (kits.notify@symbian.com)
-
-NOTESRC_RELEASE_REASON
-Symbian Build System release.
--- a/sbsv2/raptor/lib/config/arm.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/config/arm.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -1,51 +1,62 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- build configurations for ARM compilers -->
+	<!-- build variants for ARM toolchain builds -->
 	<var name="arm" extends="root">
 		<varRef ref="default.interfaces"/>
 		<varRef ref="default.locations"/>
-		<env name="EFREEZE" default="$(PERL) $(EPOCROOT)/epoc32/tools/efreeze.pl" type="tool"/>
-		<!-- picked up from the Environment -->
-		<env name="ELF2E32" default="$(EPOCROOT)/epoc32/tools/elf2e32$(DOTEXE)" type="tool"/>
+		
+		<!-- tools and scripts -->
 		<env name="BMCONV" default="$(EPOCROOT)/epoc32/tools/bmconv$(DOTEXE)" type="tool"/>
 		<env name="CHECKLIB" default="$(EPOCROOT)/epoc32/tools/checklib$(DOTEXE)" type="tool"/>
-		<env name="TRANASM" default="$(PERL) $(EPOCROOT)/epoc32/tools/tranasm.pl" type="tool"/>
 		<env name="CPPFILT" default="$(GCCPREFIX)c++filt$(DOTEXE)" type="tool"/>
+		<env name="EFREEZE" default="$(PERL) $(EPOCROOT)/epoc32/tools/efreeze.pl" type="script"/>
+		<env name="ELF2E32" default="$(EPOCROOT)/epoc32/tools/elf2e32$(DOTEXE)" type="tool"/>
+		<env name="PREPDEF" default="$(PERL) $(EPOCROOT)/epoc32/tools/prepdef.pl" type="script"/>
 		<env name="RCOMP" default="$(EPOCROOT)/epoc32/tools/rcomp$(DOTEXE)" type="tool"/>
-		<env name="PREPDEF" default="$(PERL) $(EPOCROOT)/epoc32/tools/prepdef.pl" type="path"/>
-		<env name="STRINGTABLE" default="$(PERL) $(EPOCROOT)/epoc32/tools/stringtable.pl" type="path"/>
-		<!-- RANSLEEP is a program that can be used to cause a random delay in milliseconds. This is only useful in parallel builds.  See the PERTURBSTARTTIME switch for more details.  -->
+		<!-- RANSLEEP is a program that can be used to cause a random delay in milliseconds. This is only useful in parallel builds. See the PERTURBSTARTTIME switch for more details.  -->
 		<env name="RANSLEEP" default="$(SBS_HOME)/bin/$(HOSTPLATFORM_DIR)/ransleep$(DOTEXE)" type="tool"/>
-		<set name="BLDINF_OUTPUTPATH" value="$(SBS_BUILD_DIR)"/>
-		<set name="CDEFS" value=""/>	
-		<!-- arm specific interfaces -->
+		<env name="SBSV1MAKE" default="$(EPOCROOT)/epoc32/tools/make$(DOTEXE)" type="tool"/>
+		<env name="STRINGTABLE" default="$(PERL) $(EPOCROOT)/epoc32/tools/stringtable.pl" type="script"/>
+		<env name="TRANASM" default="$(PERL) $(EPOCROOT)/epoc32/tools/tranasm.pl" type="script"/>
+			
+		<!-- interfaces -->
 		<set name="INTERFACE.extension" value="Symbian.extension"/>
-		<!-- link to bld.inf and mmp platform names -->
-		<set name="ARMMACROS" value="__MARM_ARMV5__ $(ARMMACROS.CONFIG) $(ARMMACROS.VAR)"/>
+		
+		<!-- macros -->
 		<set name="ARMMACROS.CONFIG" value=""/>
 		<set name="ARMMACROS.VAR" value=""/>
+		<set name="ARMMACROS" value="__MARM_ARMV5__ $(ARMMACROS.CONFIG) $(ARMMACROS.VAR)"/>
+		<set name="PLATMACROS.WINDOWS" value="$(PLATMACROS.TOOLCHAIN) EPOC32 MARM EABI GENERIC_MARM MARM_ARMV5 $(PLATMACROS.CONFIG) $(PLATMACROS.VAR)"/>
+		<set name="PLATMACROS.LINUX" value="$(PLATMACROS.WINDOWS)"/>
+		<set name="PLATMACROS.CONFIG" value=""/>
+		<set name="PLATMACROS.VAR" value=""/>
+		<set name="PLATMACROS.TOOLCHAIN" value=""/>
+		
+		<set name="BLDINF_OUTPUTPATH" value="$(SBS_BUILD_DIR)"/>
 		<set name="CAPABILITY" value=""/>
+		<set name="CDEFS" value="__SUPPORT_CPP_EXCEPTIONS__ _UNICODE __SYMBIAN32__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE__=&quot;$(PRODUCT_INCLUDE)&quot; $(MMPDEFS) $(ARMMACROS)"/>
 		<set name="CODE_SEGMENT_START" value=""/>
 		<set name="DEFAULT_STDCPP_NEWLIB" value="stdnew.dso"/>
 		<set name="DEFAULT_SYMBIAN_NEWLIB" value="scppnwdl.dso"/>
+		<set name="DUMPBCINFO" value=""/>
+		<set name="EPOCSTACKSIZE" value=""/>
 		<set name="FULLVARIANTPATH" value="$(VARIANTPLATFORM)/$(VARIANTTYPE)"/>
 		<set name="HEADER_FILES_CONTROL_OPTION" value=""/>
 		<set name="LIBRARY_DEBUG" value=""/>
 		<set name="MMPDEFS" value=""/>
 		<set name="NMAKE" value="nmake"/>
 		<set name="NMAKEFLAGS" value="-nologo -x - "/>
+		<set name="NO_UNALIGNED_ACCESS" value="$(CC.NO_UNALIGNED_ACCESS)"/>
 		<set name="OUTPUTPATH" value="$(SBS_BUILD_DIR)"/>
 		<set name="PERTURBSTARTTIME" value=""/>
-		<!-- add a random delay before starting armcc or armlink to ease contention for licensesthe maximum time to delay in milliseconds. RANSLEEP program must be available.   -->
+		<!-- add a random delay before starting armcc or armlink to ease contention for licenses the maximum time to delay in milliseconds. RANSLEEP program must be available.   -->
 		<set name="PERTURBMSECS" value="500"/>
 		<!-- the maximum time to delay in milliseconds -->
-		<set name="BLDINF_OUTPUTPATH" value="$(SBS_BUILD_DIR)"/>
+		<set name="POSTLINKER_COMPRESSION_DEFAULT" value="inflate"/>
 		<set name="RELEASEPATH" value="$(EPOCROOT)/epoc32/release"/>
 		<set name="RESOLVED_DEFFILE" value=""/>
 		<set name="RUNTIME_LIBS_PATH" value="$(EPOCROOT)/epoc32/release/armv5/lib"/>
-		<set name="SBSV1MAKE" value="$(EPOCROOT)/epoc32/tools/make$(DOTEXE)"/>
 		<set name="SID" value=""/>
-		<set name="EPOCSTACKSIZE" value=""/>
 		<set name="STATIC_LIBRARY_DIR" value="$(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)"/>
 		<set name="STATIC_RUNTIME_DIR" value="$(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)"/>
 		<set name="SYMBIAN_CC_MESSAGE_OPTION" value="$(CC_WARNINGS_CONTROL_OPTION) $(CC_ERRORS_CONTROL_OPTION)"/>
@@ -57,16 +68,9 @@
 		<set name="SYSTEMINCLUDE" value=""/>
 		<set name="TARGET" value=""/>
 		<set name="UNIX_SLASH_FOR_CC_ABS_PATHS" value="0"/>
-		<set name="UNRESOLVED_SYMBOL_REF_OPTION" value=""/>
-		<set name="DUMPBCINFO" value=""/>
-		<set name="NO_UNALIGNED_ACCESS" value="$(CC.NO_UNALIGNED_ACCESS)"/>
-		<set name="PLATMACROS.WINDOWS" value="$(PLATMACROS.TOOLCHAIN) EPOC32 MARM EABI GENERIC_MARM MARM_ARMV5 $(PLATMACROS.CONFIG) $(PLATMACROS.VAR)"/>
-		<set name="PLATMACROS.LINUX" value="$(PLATMACROS.WINDOWS)"/>
-		<set name="PLATMACROS.CONFIG" value=""/>
-		<set name="PLATMACROS.VAR" value=""/>
-		<set name="PLATMACROS.TOOLCHAIN" value=""/>
-		<set name="POSTLINKER_COMPRESSION_DEFAULT" value="inflate"/>		
+		<set name="UNRESOLVED_SYMBOL_REF_OPTION" value=""/>	
 	</var>
+	
 	<var name="v5">
 		<set name="TRADITIONAL_PLATFORM" value="ARMV5"/>
 		<set name="VARIANTPLATFORM" value="armv5"/>
--- a/sbsv2/raptor/lib/config/gcc.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/config/gcc.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -1,33 +1,33 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-
-	<!-- build configurations for GCC compilers -->
+	<!-- build variants for GCC toolchains -->
 	<var name="tools2_base" extends="root">
-
 		<varRef ref="default.interfaces"/>
 		<varRef ref="default.locations"/>
-		<!-- picked up from the Environment -->
+		
+		<!-- toolchain tools -->
 		<env name='RANLIB' default='$(GCCPREFIX)ranlib$(DOTEXE)' type='tool'/>
 		<env name='GCC' default='$(GCCPREFIX)g++$(DOTEXE)' type='tool'/>
 		<env name='AR' default='$(GCCPREFIX)ar$(DOTEXE)' type='tool'/>
+		
+		<set name='COMPILER' value='$(GCC) -c' type='tool' versionCommand='$(GCC) -v' versionResult='gcc version (3.[456])|(4.[0-9])'/>
+		<set name='LINKER' value='$(GCC)'/>
+
+		<!-- tools and scripts -->
+		<env name='JAVATC' default='$(JAVA_HOME)/bin/java' type='tool'/> <!-- Java used by Trace Compiler -->
 
 		<!-- interfaces -->
 		<set name="INTERFACE.exe" value="Tools.exe"/>
 		<set name="INTERFACE.lib" value="Tools.lib"/>
 
-		<!-- Java used by Trace Compiler -->
-		<env name='JAVA_HOME' default='' type='path'/>
-		<env name='JAVATC' default='$(JAVA_HOME)/bin/java' type='tool'/>
-
 		<!-- link to bld.inf and mmp platform names -->
 		<set name='TRADITIONAL_PLATFORM' value='TOOLS2'/>
+
+		<!-- Java used by Trace Compiler -->
+		<set name='CFLAGS' value='-fdefer-pop -fmerge-constants -fthread-jumps -floop-optimize -fif-conversion -fif-conversion2 -fguess-branch-probability -fcprop-registers -foptimize-sibling-calls -fstrength-reduce -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse -fgcse-lm -fgcse-sm -fgcse-las -fdelete-null-pointer-checks -fexpensive-optimizations -fregmove -fschedule-insns -fschedule-insns2 -fsched-interblock -fsched-spec -fcaller-saves -fpeephole2 -freorder-blocks -freorder-functions -fstrict-aliasing -funit-at-a-time -falign-functions -falign-jumps -falign-loops -falign-labels -fcrossjumping -pipe -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas -m32'/>
+		<env name='JAVA_HOME' default='' type='path'/>		
 		<set name='VARIANTPLATFORM' value='tools2'/>
 
-		<!-- used by FLM code -->
-		<set name='COMPILER' value='$(GCC) -c' type='tool' versionCommand='$(GCC) -v' versionResult='gcc version (3.[456])|(4.[0-9])'/>
-
-		<set name='CFLAGS' value='-fdefer-pop -fmerge-constants -fthread-jumps -floop-optimize -fif-conversion -fif-conversion2 -fguess-branch-probability -fcprop-registers -foptimize-sibling-calls -fstrength-reduce -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse -fgcse-lm -fgcse-sm -fgcse-las -fdelete-null-pointer-checks -fexpensive-optimizations -fregmove -fschedule-insns -fschedule-insns2 -fsched-interblock -fsched-spec -fcaller-saves -fpeephole2 -freorder-blocks -freorder-functions -fstrict-aliasing -funit-at-a-time -falign-functions -falign-jumps -falign-loops -falign-labels -fcrossjumping -pipe -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas -m32'/>
-
 		<!-- msys based programs sometimes don't search the path properly.
 		COMPILER_PATH can be set to tell gcc where to find
 		as.exe (sometimes it doesn't and a build step fails).
@@ -39,8 +39,6 @@
 
 		<!-- macro definitions set by mmps etc -->
 		<set name='CDEFS' value='$(MMPDEFS)'/>
-
-
 		<set name='CDEFS.DEFAULT' value='__SYMBIAN32__ __TOOLS__ __TOOLS2__ __EXE__ __SUPPORT_CPP_EXCEPTIONS__ __PRODUCT_INCLUDE__="$(PRODUCT_INCLUDE)"'/>
 		<set name='CDEFS.WIN32' value='$(CDEFS.DEFAULT) _WIN32 WIN32 _WINDOWS __TOOLS2_WINDOWS__'/>
 		<set name='CDEFS.LINUX' value='$(CDEFS.DEFAULT) __LINUX__ __TOOLS2_LINUX__'/>
@@ -58,7 +56,6 @@
 		<!-- always use stlport headers -->
 		<set name='SYSTEMINCLUDE' value='$(EPOCINCLUDE)/tools/stlport'/>
 
-		<set name='LINKER' value='$(GCC)'/>
 		<set name='LFLAGS' value=''/>
 		<set name='STATICLIBRARY' value='stlport.5.1'/>
 		<set name='LIBS' value=''/>
--- a/sbsv2/raptor/lib/config/gcce.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/config/gcce.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -1,15 +1,15 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- GCCE build variant for ARM compilers -->
-	<!-- This is called gcce_base in case someone wants to use "gcce" as a configuration name -->
+	<!-- build variant for GCCE ARM toolchains -->
 	<var name="gcce_base">
 		<set name="TOOLCHAIN" value="GCCE"/>
 		<set name="PLATMACROS.TOOLCHAIN" value="GCCE"/>
 
+		<!-- toolchain tools -->
+		<set name="GCCEAR" value="$(GCCEBIN)/arm-none-symbianelf-ar$(DOTEXE)"/>
+		<set name="GCCEASM" value="$(GCCEBIN)/arm-none-symbianelf-as$(DOTEXE)"/>
 		<set name="GCCECC" value="$(GCCEBIN)/arm-none-symbianelf-g++$(DOTEXE)"/>
 		<set name="GCCELD" value="$(GCCEBIN)/arm-none-symbianelf-g++$(DOTEXE)"/>
-		<set name="GCCEASM" value="$(GCCEBIN)/arm-none-symbianelf-as$(DOTEXE)"/>
-		<set name="GCCEAR" value="$(GCCEBIN)/arm-none-symbianelf-ar$(DOTEXE)"/>
 		<set name="FROMELF" value="$(GCCEBIN)/arm-none-symbianelf-readelf$(DOTEXE)"/>
 
 		<set name="CC" value="$(GCCECC)"/>
@@ -119,9 +119,10 @@
 		<set name="UNRESOLVED_SYMBOL_REF_OPTION" value=""/>
 		<set name="USER_LIBS_PATH_OPTION" value="--userlibpath"/>
 		<set name="USER_STATIC_RUNTIME_LIB" value="usrt3_1.lib"/>
+		<set name="USER_STATIC_RUNTIME_LIB_NESTED_EXCEPTIONS" value="usrt_nx_3_1.lib"/>
 		<set name="USERINCLUDE" value=""/>
 		<set name="VFE_OPTION" value=""/>
 
-		<append name="CDEFS" value='__SUPPORT_CPP_EXCEPTIONS__ _UNICODE __SYMBIAN32__ __GCCE__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE__="$(PRODUCT_INCLUDE)" $(MMPDEFS) $(ARMMACROS)'/>
+		<append name="CDEFS" value="__GCCE__"/>
 	</var>
 </build>
--- a/sbsv2/raptor/lib/config/gccxml.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/config/gccxml.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -1,21 +1,20 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- build configurations for the gccxml_cc1plus C++ language processor -->
+	<!-- build variants for the gccxml_cc1plus C++ language processor -->
 	<var name="gccxml_base" extends="root">
 		<varRef ref="default.interfaces"/>
 		<varRef ref="default.locations"/>
-		<!-- picked up from the Environment -->
+		
+		<!-- tools and scripts -->
+		<env name='BMCONV' default="$(EPOCROOT)/epoc32/tools/bmconv$(DOTEXE)" type='tool'/>
+		<set name='CC' value="$(EPOCROOT)/epoc32/tools/gccxml_cc1plus$(DOTEXE)" type='tool'/>
 		<env name='CPP' default='$(GNUCPP)' type='tool'/>
-		<env name='BMCONV' default="$(EPOCROOT)/epoc32/tools/bmconv$(DOTEXE)" type='tool'/>
-		<env name='CREATERFIFILE' default='$(PERL) $(SBS_HOME)/bin/createrfifile.pl ' type='path'/>
+		<env name='CREATERFIFILE' default='$(PERL) $(SBS_HOME)/bin/createrfifile.pl ' type='script'/>
 		<env name='GNUAWK' default='$(GNUPREFIX)gawk$(DOTEXE)' type='tool' versionCommand='$(GNUAWK) --version' versionResult='GNU Awk [3-9].*'/>
-		<env name='MAKEDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/makedef.pl' type='path'/>
-		<env name='PREPDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/prepdef.pl' type='path'/>
+		<env name='MAKEDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/makedef.pl' type='script'/>
+		<env name='PREPDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/prepdef.pl' type='script'/>
 		<env name='RCOMP' default='$(EPOCROOT)/epoc32/tools/rcomp$(DOTEXE)' type='tool'/>
-		<env name='RVCT22BIN' type='path'/>
-		<env name='RVCT22INC' type='path'/>
-		<env name='RVCT22LIB' type='path'/>
-		<env name='STRINGTABLE' default='$(PERL) $(EPOCROOT)/epoc32/tools/stringtable.pl' type='path'/>
+		<env name='STRINGTABLE' default='$(PERL) $(EPOCROOT)/epoc32/tools/stringtable.pl' type='script'/>
 
 		<!-- link to bld.inf and mmp platform names -->
 		<set name='TRADITIONAL_PLATFORM' value='GCCXML'/>
@@ -51,11 +50,13 @@
 		<env name='JAVATC' default='$(JAVA_HOME)/bin/java' type='tool'/>
 
 		<!-- note that gccxml_cc1plus should be version checked, but I've yet to find a reliable way of doing this -->
-		<set name='CC' value="$(EPOCROOT)/epoc32/tools/gccxml_cc1plus$(DOTEXE)" type='tool'/>
 		<set name='CDEFS' value='_UNICODE __SYMBIAN32__ __GCC32__ __EPOC32__ __MARM__ __MINGW32__ _STLP_LITTLE_ENDIAN __GCCXML__ __MARM_ARM4__ $(MMPDEFS)'/>
 		<set name='CFLAGS' value='-bi -nostdinc -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas -UWIN32 -fshort-wchar -quiet -w '/>
 
 		<!-- in support of TEMs - processed as if in an RVCT build -->
+		<env name='RVCT22BIN' type='toolchainpath'/>
+		<env name='RVCT22INC' type='toolchainpath'/>
+		<env name='RVCT22LIB' type='toolchainpath'/>
 		<set name='RVCTBIN' value='$(RVCT22BIN)'/>
 		<set name='RVCTINC' value='$(RVCT22INC)'/>
 		<set name='RVCTLIB' value='$(RVCT22LIB)'/>
--- a/sbsv2/raptor/lib/config/locations.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/config/locations.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -30,7 +30,7 @@
 		<env name='SBS_GNUTOUCH' default='/bin/touch' type='tool'/>
 		<env name='SBS_GNUFIND' default='/usr/bin/find' type='tool'/>
 		<env name='SBS_GNUGREP' default='/bin/grep' type='tool'/>
-		<env name='SBS_GNUSORT' default='/bin/sort' type='tool'/>
+		<env name='SBS_GNUSORT' default='sort' type='tool'/>
 		<env name='SBS_SHELL' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/sh" type='tool'/>
 		<env name='SBS_ZIP' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/zip" type='tool'/>
 		<env name='SBS_UNZIP' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/unzip" type='tool'/>
@@ -102,13 +102,13 @@
 		<set name='UNZIP' value="$(SBS_UNZIP)" type='tool'/>
 		<set name='PERL' value='$(SBS_PERL)' type='tool'/>
 		<set name='PYTHON' value='$(SBS_PYTHON)' type='tool' versionCommand='$(PYTHON) -V' versionResult='Python 2\.[456].*'/>
-
+		
 		<set name='DEFAULT_PLATFORMS' value='ARMV5 ARMV7 WINSCW'/>
 		<set name='BASE_DEFAULT_PLATFORMS' value='ARMV5 ARMV7 WINSCW ARMV5SMP'/>
 		<set name='BASE_USER_DEFAULT_PLATFORMS' value='ARMV5 ARMV7 WINSCW'/>
 
 		<set name='BUILD_INCLUDE' value=''/>
-		<set name='CREATEVMAP' value='$(PYTHON) $(SBS_HOME)/bin/createvmap.py' type='tool'/>
+		<set name='CREATEVMAP' value='$(PYTHON) $(SBS_HOME)/bin/createvmap.py' type='script'/>
 		<set name='CREATEVMAPCPP' value='$(SBS_BVCPP)' type='tool'/>
 		<set name='FEATURELISTFILES' value=''/>
 		<set name='FEATUREVARIANTNAME' value=''/>
--- a/sbsv2/raptor/lib/config/make.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/config/make.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -47,6 +47,9 @@
 
 		<!-- is the text output with -j buffered or scrambled? -->
 		<set name="scrambled" value="true"/>
+
+		<!-- workaround for damaged log output from emake -->
+		<set name="copylogfromannofile" value="false"/>
 	</var>
 	
 	<alias name="make" meaning="make_engine"/>
@@ -67,6 +70,9 @@
 		<set name="build" value="$(EMAKE) HAVE_ORDERONLY= -r"/>
 		<set name="scrambled" value="false"/>
 		<set name='TALON_DESCRAMBLE' value=''/>
+
+		<!-- workaround for damaged log output from emake -->
+		<set name="copylogfromannofile" value="true"/>
 	</var>
 
 	<alias name="emake" meaning="emake_engine"/>
--- a/sbsv2/raptor/lib/config/msvc.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/config/msvc.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- build configurations for MSVC compilers -->
+	<!-- build variants for MSVC toolchains -->
 	<var name="tools_base" extends="root">
 		<varRef ref="default.interfaces"/>
 		<varRef ref="default.locations"/>
 
-		<!-- picked up from the Environment -->
+		<!-- toolchain tools -->
 		<env name='MS_CL' default='cl.exe' type='tool' versionCommand='$(MS_CL)' versionResult='Version 12\.[0-9]{2}\.[0-9]{4}'/>
 		<env name='MS_LINK' default='link.exe' type='tool' versionCommand='$(MS_LINK)' versionResult='Version 6\.[0-9]{2}.[0-9]{4}'/>
 		<env name='MS_LIB' default='lib.exe' type='tool' versionCommand='$(MS_LIB)' versionResult='Version 6\.[0-9]{2}.[0-9]{4}'/>
@@ -17,8 +17,14 @@
 
 		<!-- link to bld.inf and mmp platform names -->
 		<set name='TRADITIONAL_PLATFORM' value='TOOLS'/>
+
+		<!-- interfaces -->
+		<set name="INTERFACE.exe" value="msvctools.exe"/>
+		<set name="INTERFACE.lib" value="msvctools.lib"/>		
+		
 		<set name='NMAKE' value='nmake'/>
 		<set name='NMAKEFLAGS' value='-nologo -x - '/>
+		
 		<!-- tools options -->
 		<set name='OPT.BROWSEDB' value='-o'/>
 		<set name='OPT.BROWSEFILE' value='-FR'/>
@@ -32,7 +38,6 @@
 		<set name='OPT.NOLOGO' value='-nologo'/>
 		<set name='OPT.OBJECTFILE' value='-Fo'/>
 		<set name='OPT.OUTFILE' value='-out:'/>
-		<set name='OPT.PDBFILE' value='-Fd'/>
 		<set name='OPT.PREINCLUDE' value='-FI '/>
 		<set name='OPT.SUBSYSTEM' value='-subsystem:'/>
 		<set name='OPT.SYSINCLUDE' value='-I '/>
@@ -44,7 +49,7 @@
 		<set name='CDEFS.REL' value='NDEBUG'/>
 		<set name='CFLAGS' value='$(OPT.COMPILE) $(OPT.NOLOGO) -Zp4 -GF'/>
 		<set name='CFLAGS.DEFAULT.WARNLEVEL' value='-W4'/>
-		<set name='CFLAGS.DEB' value='-Zi -Od'/>
+		<set name='CFLAGS.DEB' value='-Od'/>
 		<set name='CFLAGS.REL' value='-O1 -Op'/>
 		<set name='SHAREDFLAGS' value='kernel32.lib $(OPT.NOLOGO) -machine:IX86  -ignore:4089 -ignore:4005 -ignore:4098'/>
 		<set name='LD' value='$(MS_LINK)'/>
@@ -57,9 +62,6 @@
 		<set name='BROWSEFLAGS' value='$(OPT.NOLOGO)'/>
 		<set name='PLATMACROS.WINDOWS' value='VC32 TOOLS MSVC6 MSVC600'/>
 		<set name='PLATMACROS.LINUX' value='$(PLATMACROS.WINDOWS)'/>
-		<!-- interfaces -->
-		<set name="INTERFACE.exe" value="msvctools.exe"/>
-		<set name="INTERFACE.lib" value="msvctools.lib"/>
 
 		<set name='RELEASEPATHROOT' value='$(EPOCROOT)/epoc32/release'/>
 		<set name='IMPORTLIBPATH' value='$(RELEASEPATHROOT)/tools/udeb'/>
--- a/sbsv2/raptor/lib/config/root.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/config/root.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -11,6 +11,8 @@
 	-->
 
 	<var name="root">
+		<env name='FLMDEBUG' default=''/>	
+	
 		<varRef ref="root.places"/>
 		<varRef ref="root.properties"/>
 		
--- a/sbsv2/raptor/lib/config/rvct.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/config/rvct.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -1,68 +1,62 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- RVCT build variant for RVCT compilers -->
+	<!-- build variant for RVCT ARM toolchains -->
 	<var name="rvct">
 		<set name="TOOLCHAIN" value="RVCT"/>
 		<set name="PLATMACROS.TOOLCHAIN" value="ARMCC"/>
+	
+		<!-- toolchain tools -->
+		<set name="ARMAR" value="$(RVCTBIN)/armar$(DOTEXE)"/>
+		<set name="ARMASM" value="$(RVCTBIN)/armasm$(DOTEXE)"/>
+		<set name="ARMCC" value="$(RVCTBIN)/armcc$(DOTEXE)"/>
+		<set name="ARMLD" value="$(RVCTBIN)/armlink$(DOTEXE)"/>
+		<set name="FROMELF" value="$(RVCTBIN)/fromelf$(DOTEXE)"/>
+		
 		<set name="CC" value="$(ARMCC)"/>
 		<set name="LD" value="$(ARMLD)"/>
 		<set name="ASM" value="$(ARMASM)"/>
 		<set name="AR" value="$(ARMAR)"/>	
-		<set name="ARMCC" value="$(RVCTBIN)/armcc$(DOTEXE)"/>
-		<set name="ARMLD" value="$(RVCTBIN)/armlink$(DOTEXE)"/>
-		<set name="ARMASM" value="$(RVCTBIN)/armasm$(DOTEXE)"/>
-		<set name="ARMAR" value="$(RVCTBIN)/armar$(DOTEXE)"/>
-		<set name="FROMELF" value="$(RVCTBIN)/fromelf$(DOTEXE)"/>
+	
 		<set name="AAPCS_OPTION" value="--apcs /inter"/>
 		<set name="ARCHIVER_CREATE_OPTION" value="--create"/>
 		<set name="ARM_INSTRUCTION_SET" value="--arm"/>
 		<set name="ASM_OUTPUT_OPTION" value="-o"/>
 		<set name="ASSEMBLER_LISTING_OPTION" value="-S"/>
 		<set name="BPABI_OPTION" value="--bpabi"/>
+		<set name="CC.DWARF2" value="--dwarf2"/>
+		<set name="CC.DWARF3" value="--dwarf3"/>
 		<set name="CC_ERRORS_CONTROL_OPTION" value="--diag_error 1267"/>
 		<set name="CC_WARNINGS_CONTROL_OPTION" value="--diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331"/>
-		<set name="C_LANG_OPTION" value=""/>
+		<set name="CFLAGS" value=""/>
+		<set name="CIADEFS" value="__CIA__"/>
+		<set name="CODE_SEGMENT_START" value=""/>
 		<set name="COMMANDFILE_OPTION" value="--via "/>
+		<set name="COMPILER_CIA_FLAGS" value=""/>
+		<set name="COMPILER_DEFINES" value=""/>
+		<set name="COMPILER_FPU_OPTION" value="--fpu "/>
+		<set name="COMPILER_INTERWORK_DEFINES" value="__MARM_INTERWORK__"/>
+		<set name="COMPILER_SYSTEM_INCLUDE_OPTION" value="-J"/>
+		<set name="COMPILER_THUMB_DEFINES" value="__MARM_THUMB__"/>
 		<set name="COMPILE_ONLY_OPTION" value="-c"/>
 		<set name="CPP_LANG_OPTION" value="--cpp"/>
+		<set name="C_LANG_OPTION" value=""/>
+		<set name="DATA_SEGMENT_START" value="$(SPLIT_OPTION) $(RW_BASE_OPTION)"/>
 		<set name="DEBUG_OPTIMISATION" value="-O0"/>
 		<set name="DEPEND_OPTION" value="--depend_format=unix --depend"/>
 		<set name="ENUM_OPTION" value="--enum_is_int"/>
+		<set name="EXCEPTIONS" value="--exceptions --exceptions_unwind"/>
 		<set name="EXPORT_VTBL_OPTION" value="--export_all_vtbl"/>
+		<set name="EXTRA_CC_OPTION" value=""/>
 		<set name="EXTRA_LD_OPTION" value="--datacompressor=off"/>
 		<set name="FPMODE_OPTION" value="--fpmode ieee_no_fenv"/>
-		<set name="LD_ERRORS_CONTROL_OPTION" value=""/>
-		<set name="LD_WARNINGS_CONTROL_OPTION" value="--diag_suppress 6331"/>
-		<set name='LD_WARNINGS_SUPPRESSION_ARMLIBS' value='--diag_suppress 6780' />
-		<set name="LISTING_OPTION" value="-S"/>
-		<set name="EXCEPTIONS" value="--exceptions --exceptions_unwind"/>
-		<set name="NO_EXCEPTIONS" value="--no_exceptions --no_exceptions_unwind"/>
-		<set name="PREINCLUDE_OPTION" value="--preinclude"/>
-		<set name="PREPROCESSOR_OPTION" value="-E"/>
-		<set name="REL_OPTIMISATION" value="-O2"/>
-		<set name="STDLIB_OPTION" value="--no_scanlib"/>
-		<set name="RUNTIME_SYMBOL_VISIBILITY_OPTION" value="--dllimport_runtime"/>
-		<set name="RW_BASE_OPTION" value="--rw-base" /> 
-		<set name="RW_BASE" value="$(RW_BASE_OPTION) 0x400000"/>
-		<set name="CODE_SEGMENT_START" value=""/>
-		<set name="PREINCLUDE" value="$(RVCT_PRE_INCLUDE)"/>
-		<set name="CC.DWARF2" value="--dwarf2"/>
-		<set name="CC.DWARF3" value="--dwarf3"/>
+		<set name="HEADER_FILES_CONTROL_OPTION" value=""/>
+		<set name="INSTRUCTION_SET" value=""/>
 		<set name="LD.ARMV5" value=""/>
 		<set name="LD.ARMV6" value=""/>
 		<set name="LD.ARMV7" value=""/>
-		<set name="CFLAGS" value=""/>
-		<set name="CIADEFS" value="__CIA__"/>
-		<append name="CDEFS" value='__SUPPORT_CPP_EXCEPTIONS__ _UNICODE __SYMBIAN32__ __ARMCC__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE__="$(PRODUCT_INCLUDE)" $(MMPDEFS) $(ARMMACROS)'/>
-		<set name="COMPILER_CIA_FLAGS" value=""/>
-		<set name="COMPILER_FPU_OPTION" value="--fpu "/>
-		<set name="COMPILER_DEFINES" value=""/>
-		<set name="COMPILER_INTERWORK_DEFINES" value="__MARM_INTERWORK__"/>
-		<set name="COMPILER_SYSTEM_INCLUDE_OPTION" value="-J"/>
-		<set name="COMPILER_THUMB_DEFINES" value="__MARM_THUMB__"/>
-		<set name="DATA_SEGMENT_START" value="$(SPLIT_OPTION) $(RW_BASE_OPTION)"/>
-		<set name="EXTRA_CC_OPTION" value=""/>
-		<set name="HEADER_FILES_CONTROL_OPTION" value=""/>
+		<set name="LD_ERRORS_CONTROL_OPTION" value=""/>
+		<set name="LD_WARNINGS_CONTROL_OPTION" value="--diag_suppress 6331"/>
+		<set name="LD_WARNINGS_SUPPRESSION_ARMLIBS" value="--diag_suppress 6780"/>
 		<set name="LIBPATH" value=""/>
 		<set name="LIBRARY" value=""/>
 		<set name="LICENSERETRY_OPTION" value=""/>
@@ -71,25 +65,35 @@
 		<set name="LINKER_DEFAULT_LIBS" value=""/>
 		<set name="LINKER_DEFAULT_LIB_PATHS" value=""/>
 		<set name="LINKER_ENTRY_OPTION" value="--entry"/>
+		<set name="LINKER_GROUP_END_OPTION" value=""/>
 		<set name="LINKER_GROUP_START_OPTION" value=""/>
-		<set name="LINKER_GROUP_END_OPTION" value=""/>
 		<set name="LINKER_MISC_FLAGS" value="$(LICENSERETRY_OPTION)"/>
 		<set name="LINKER_NODEBUG_OPTION" value=""/>
 		<set name="LINKER_SCRIPT_FILE_OPTION" value=""/>
+		<set name="LINKER_SYMBOLS_FILE_OPTION" value="--list"/>
 		<set name="LINKER_SYMBOLS_OPTION" value="--symbols"/> 
-		<set name="LINKER_SYMBOLS_FILE_OPTION" value="--list"/>
+		<set name="LISTING_OPTION" value="-S"/>
+		<set name="NO_EXCEPTIONS" value="--no_exceptions --no_exceptions_unwind"/>
+		<set name="NO_UNALIGNED_ACCESS" value="$(CC.NO_UNALIGNED_ACCESS)"/>
+		<set name="PREINCLUDE" value="$(RVCT_PRE_INCLUDE)"/>
+		<set name="PREINCLUDE_OPTION" value="--preinclude"/>
+		<set name="PREPROCESSOR_OPTION" value="-E"/>
+		<set name="REL_OPTIMISATION" value="-O2"/>
+		<set name="RUNTIME_SYMBOL_VISIBILITY_OPTION" value="--dllimport_runtime"/>
+		<set name="RW_BASE" value="$(RW_BASE_OPTION) 0x400000"/>
+		<set name="RW_BASE_OPTION" value="--rw-base"/> 
 		<set name="SHARED_OBJECT_OPTION" value="--dll"/>
 		<set name="SID" value=""/>
 		<set name="SO_NAME_OPTION" value="--soname"/>
 		<set name="STATIC_LIBS_PATH" value="$(RVCTLIB)/armlib"/>
 		<set name="STDCPP_INCLUDE" value="$(EPOCINCLUDE)/stdapis"/>
+		<set name="STDLIB_OPTION" value="--no_scanlib"/>
+		<set name="SUPPORTS_ABIV1_IMPLIBS" value="1"/>	
 		<set name="SYMBIAN_LD_MESSAGE_OPTION" value="$(LD_WARNINGS_CONTROL_OPTION) $(LD_ERRORS_CONTROL_OPTION)"/>
-		<set name="SUPPORTS_ABIV1_IMPLIBS" value="1"/>		
-		<set name="TARGET_RELOCATION_OPTION" value="" />
 		<set name="SYMVER_OPTION" value="--symver_soname"/>
+		<set name="TARGET_RELOCATION_OPTION" value=""/>
 		<set name="TEMP_FILES_OPTION" value=""/>
 		<set name="THUMB_INSTRUCTION_SET" value="--thumb"/>
-		<set name="INSTRUCTION_SET" value=""/>
 		<set name="TRANASM_FLAGS" value="-n -s"/>
 		<set name="TRANASM_INPUT_OPTION" value=""/>
 		<set name="TRANASM_OUTPUT_OPTION" value="-o="/>
@@ -100,6 +104,7 @@
 		<set name="USERINCLUDE" value=""/>
 		<set name="USER_LIBS_PATH_OPTION" value="--userlibpath"/>
 		<set name="VFE_OPTION" value="--no_vfe"/>
-		<set name="NO_UNALIGNED_ACCESS" value="$(CC.NO_UNALIGNED_ACCESS)"/>
+		
+		<append name="CDEFS" value="__ARMCC__"/>
 	</var>
 </build>
--- a/sbsv2/raptor/lib/config/variants.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/config/variants.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -5,7 +5,19 @@
 	These can be referenced from the command-line or in configurations.
 	
 	-->
-  
+ 	
+	<!-- This variant enables building win32 tools in Linux. Tools2 on Linux only -->
+	<var name="win32">
+		<set name='TOOLS2WIN32' value='1'/>
+		<env name='SBS_MINGW_LINUX_PREFIX' default='i586-mingw32msvc'/>
+		<env name='GCC' default='$(SBS_MINGW_LINUX_PREFIX)-g++' type='tool'/>
+		<env name='ARCHIVER' default='$(SBS_MINGW_LINUX_PREFIX)-ar' type='tool'/>
+		<env name='RANLIB' default='$(SBS_MINGW_LINUX_PREFIX)-ranlib' type='tool'/>
+		<set name='RELEASEPATH' value='$(EPOCROOT)/epoc32/release/tools2/$(VARIANTTYPE)'/>
+		<set name='DOTEXE' value='.exe'/>
+		<set name='PLATMACROS.LINUX' value='$(PLATMACROS.WINDOWS)'/>
+	</var>
+
 	<!-- This variant turns debug info on for arm only -->
 	<var name="debug_info">
 		<set name='DEBUG_INFO' value='1'/>
@@ -79,37 +91,40 @@
 	</var>
 	
 	<var name="gcce4_3_2" extends="gcce_base">
-		<env name="SBS_GCCE432BIN" type="path" />
+		<env name="SBS_GCCE432BIN" type="toolchainpath" />
 		<set name="GCCEBIN" value="$(SBS_GCCE432BIN)" />
+		<set name="GCCECC" value="$(GCCEBIN)/arm-none-symbianelf-g++$(DOTEXE)" type="tool" versionCommand="$(GCCECC) -dumpversion" versionResult="4.3.2"/>
 		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct3_1.dso drtrvct3_1.dso"/>
 		<set name="PLATMACROS.VAR" value="GCCE_4 GCCE_4_3"/>
 		<set name="ARMMACROS.VAR" value="__GCCE_4__ __GCCE_4_3__"/>
 	</var>
 
 	<var name="gcce4_3_3" extends="gcce_base">
-		<env name="SBS_GCCE433BIN" type="path" />
+		<env name="SBS_GCCE433BIN" type="toolchainpath" />
 		<set name="GCCEBIN" value="$(SBS_GCCE433BIN)" />
+		<set name="GCCECC" value="$(GCCEBIN)/arm-none-symbianelf-g++$(DOTEXE)" type="tool" versionCommand="$(GCCECC) -dumpversion" versionResult="4.3.3"/>
 		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct3_1.dso drtrvct3_1.dso"/>
 		<set name="PLATMACROS.VAR" value="GCCE_4 GCCE_4_3"/>
 		<set name="ARMMACROS.VAR" value="__GCCE_4__ __GCCE_4_3__"/>
 	</var>
 	
 	<var name="gcce4_4_1" extends="gcce_base">
-		<env name="SBS_GCCE441BIN" type="path" />
+		<env name="SBS_GCCE441BIN" type="toolchainpath" />
 		<set name="GCCEBIN" value="$(SBS_GCCE441BIN)" />
+		<set name="GCCECC" value="$(GCCEBIN)/arm-none-symbianelf-g++$(DOTEXE)" type="tool" versionCommand="$(GCCECC) -dumpversion" versionResult="4.4.1"/>
 		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso"/>
 		<set name="PLATMACROS.VAR" value="GCCE_4 GCCE_4_4"/>
 		<set name="ARMMACROS.VAR" value="__GCCE_4__ __GCCE_4_4__"/>
 	</var>
 	
 	<var name="rvct2_2" extends="rvct">
-		<env name="RVCT22BIN" type="path"/>
-		<env name="RVCT22INC" type="path"/>
-		<env name="RVCT22LIB" type="path"/>
+		<env name="RVCT22BIN" type="toolchainpath"/>
+		<env name="RVCT22INC" type="toolchainpath"/>
+		<env name="RVCT22LIB" type="toolchainpath"/>
 		<set name="RVCTBIN" value="$(RVCT22BIN)"/>
 		<set name="RVCTINC" value="$(RVCT22INC)"/>
 		<set name="RVCTLIB" value="$(RVCT22LIB)"/>
-		<set name="ARMCC" value="&quot;$(RVCTBIN)/armcc$(DOTEXE)&quot;" type="tool" versionCommand="$(ARMCC) --vsn" versionResult="Compiler, RVCT2\.2\b"/>
+		<set name="ARMCC" value="$(RVCTBIN)/armcc$(DOTEXE)" type="tool" versionCommand="$(ARMCC) --vsn" versionResult="Compiler, RVCT2\.2\b"/>
 		<set name="OWN_LIBRARY_OPTION" value="-Ono_known_library"/>
 		<set name="RELOCATABLE_IMAGE_OPTION" value="--reloc"/>
 		<set name="SPLIT_OPTION" value="--split"/>
@@ -119,8 +134,8 @@
 		<set name="STATIC_LIBS_LIST" value="h_t__uf.l(switch8.o)"/>
 		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct2_2.dso drtrvct2_2.dso"/>
 		<set name="USER_STATIC_RUNTIME_LIB" value="usrt2_2.lib"/>
+		<set name="USER_STATIC_RUNTIME_LIB_NESTED_EXCEPTIONS" value="usrt_nx_2_2.lib"/>
 		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt2_2.lib"/>
-		<set name="USRTLIB" value="usrt2_2.lib"/>
 		<set name="NEED_ENTRYPOINT_LIBRARY" value="False"/>
 		<set name="CC.NO_UNALIGNED_ACCESS" value="--memaccess -UL41"/>
 		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="softvfp"/>
@@ -130,13 +145,13 @@
 	</var>
 
 	<var name="rvct3_1" extends="rvct">
-		<env name="RVCT31BIN" type="path"/>
-		<env name="RVCT31INC" type="path"/>
-		<env name="RVCT31LIB" type="path"/>
+		<env name="RVCT31BIN" type="toolchainpath"/>
+		<env name="RVCT31INC" type="toolchainpath"/>
+		<env name="RVCT31LIB" type="toolchainpath"/>
 		<set name="RVCTBIN" value="$(RVCT31BIN)"/>
 		<set name="RVCTINC" value="$(RVCT31INC)"/>
 		<set name="RVCTLIB" value="$(RVCT31LIB)"/>
-		<set name="ARMCC" value="&quot;$(RVCTBIN)/armcc$(DOTEXE)&quot;" type="tool" versionCommand="$(ARMCC) --version_number" versionResult="310[6-9]\d\d\b"/>
+		<set name="ARMCC" value="$(RVCTBIN)/armcc$(DOTEXE)" type="tool" versionCommand="$(ARMCC) --version_number" versionResult="310[6-9]\d\d\b"/>
 		<set name="OWN_LIBRARY_OPTION" value="--library_interface=aeabi_clib"/>
 		<set name="RELOCATABLE_IMAGE_OPTION" value=""/>
 		<set name="SPLIT_OPTION" value=""/>
@@ -146,8 +161,8 @@
 		<set name="STATIC_LIBS_LIST" value="h_5.l"/>
 		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct3_1.dso drtrvct3_1.dso"/>
 		<set name="USER_STATIC_RUNTIME_LIB" value="usrt3_1.lib"/>
+		<set name="USER_STATIC_RUNTIME_LIB_NESTED_EXCEPTIONS" value="usrt_nx_3_1.lib"/>
 		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt3_1.lib"/>
-		<set name="USRTLIB" value="usrt3_1.lib"/>
 		<set name="NEED_ENTRYPOINT_LIBRARY" value="True"/>
 		<set name="CC.NO_UNALIGNED_ACCESS" value="--no_unaligned_access"/>
 		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="softvfp"/>
@@ -160,13 +175,13 @@
 	</var>
 
 	<var name="rvct4_0" extends="rvct">
-		<env name="RVCT40BIN" type="path"/>
-		<env name="RVCT40INC" type="path"/>
-		<env name="RVCT40LIB" type="path"/>
+		<env name="RVCT40BIN" type="toolchainpath"/>
+		<env name="RVCT40INC" type="toolchainpath"/>
+		<env name="RVCT40LIB" type="toolchainpath"/>
 		<set name="RVCTBIN" value="$(RVCT40BIN)"/>
 		<set name="RVCTINC" value="$(RVCT40INC)"/>
 		<set name="RVCTLIB" value="$(RVCT40LIB)"/>
-		<set name="ARMCC" value="&quot;$(RVCTBIN)/armcc$(DOTEXE)&quot;" type="tool" versionCommand="$(ARMCC) --version_number" versionResult="400[4-9]\d\d\b"/>
+		<set name="ARMCC" value="$(RVCTBIN)/armcc$(DOTEXE)" type="tool" versionCommand="$(ARMCC) --version_number" versionResult="400[4-9]\d\d\b"/>
 		<set name="OWN_LIBRARY_OPTION" value="--library_interface=aeabi_clib"/>
 		<set name="RELOCATABLE_IMAGE_OPTION" value=""/>
 		<set name="SPLIT_OPTION" value=""/>
@@ -176,8 +191,8 @@
 		<set name="STATIC_LIBS_LIST" value=""/>
 		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso"/>
 		<set name="USER_STATIC_RUNTIME_LIB" value="usrt4_0.lib"/>
+		<set name="USER_STATIC_RUNTIME_LIB_NESTED_EXCEPTIONS" value="usrt_nx_4_0.lib"/>
 		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt4_0.lib"/>
-		<set name="USRTLIB" value="usrt4_0.lib"/>
 		<set name="NEED_ENTRYPOINT_LIBRARY" value="True"/>
 		<set name="CC.NO_UNALIGNED_ACCESS" value="--no_unaligned_access"/>
 		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="softvfp+vfpv2"/>
--- a/sbsv2/raptor/lib/config/winscw.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/config/winscw.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -1,24 +1,31 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- build configurations for Metrowerks Emulator compilers -->
+	<!-- build variants for CodeWarrior toolchains -->
 	<var name="winscw_base" extends="root">
 		<varRef ref="default.interfaces"/>
 		<varRef ref="default.locations"/>
-		<!-- picked up from the Environment -->
-		<env name='CHECKLIB' default='$(EPOCROOT)/epoc32/tools/checklib$(DOTEXE)' type='tool'/>
-		<env name='EFREEZE' default="$(PERL) $(EPOCROOT)/epoc32/tools/efreeze.pl" type='tool'/>
-		<env name='BMCONV' default="$(EPOCROOT)/epoc32/tools/bmconv$(DOTEXE)" type='tool'/>
-		<env name='MAKEDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/makedef.pl' type='path'/>
-		<env name='MWCC' default='mwccsym2$(DOTEXE)' type='tool' versionCommand='$(MWCC) -version' versionResult='Version 3.2.*'/>
-		<env name='MWLD' default='mwldsym2$(DOTEXE)' type='tool' versionCommand='$(MWLD) -version' versionResult='Version 3.2.*'/>
-		<env name='MWWINRC' default='mwwinrc$(DOTEXE)' type='tool' versionCommand='$(MWWINRC) -version' versionResult='Version 3.2.*'/>
-
-		<env name='PREPDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/prepdef.pl' type='path'/>
-		<env name='RCOMP' default='$(EPOCROOT)/epoc32/tools/rcomp$(DOTEXE)' type='tool'/>
-		<env name='STRINGTABLE' default='$(PERL) $(EPOCROOT)/epoc32/tools/stringtable.pl' type='path'/>	
+		
+		<!-- toolchain tools -->
+		<env name="MWCC" default="mwccsym2$(DOTEXE)" type="tool" versionCommand="$(MWCC) -version" versionResult="Version 3.2.*"/>
+		<env name="MWLD" default="mwldsym2$(DOTEXE)" type="tool" versionCommand="$(MWLD) -version" versionResult="Version 3.2.*"/>
+		<env name="MWWINRC" default="mwwinrc$(DOTEXE)" type="tool" versionCommand="$(MWWINRC) -version" versionResult="Version 3.2.*"/>
+		
+		<set name="CC" value="$(MWCC)"/>
+		<set name="LD" value="$(MWLD)"/>
+		<set name="RC" value="$(MWWINRC)"/>
+		
+		<!-- tools and scripts -->
+		<env name="BMCONV" default="$(EPOCROOT)/epoc32/tools/bmconv$(DOTEXE)" type="tool"/>
+		<env name="CHECKLIB" default="$(EPOCROOT)/epoc32/tools/checklib$(DOTEXE)" type="tool"/>
+		<env name="EFREEZE" default="$(PERL) $(EPOCROOT)/epoc32/tools/efreeze.pl" type="script"/>
+		<env name="MAKEDEF" default="$(PERL) $(EPOCROOT)/epoc32/tools/makedef.pl" type="script"/>
+		<env name="PREPDEF" default="$(PERL) $(EPOCROOT)/epoc32/tools/prepdef.pl" type="script"/>
+		<env name="RCOMP" default="$(EPOCROOT)/epoc32/tools/rcomp$(DOTEXE)" type="tool"/>
+		<env name="SBSV1MAKE" default="$(EPOCROOT)/epoc32/tools/make$(DOTEXE)" type="tool"/>
+		<env name="STRINGTABLE" default="$(PERL) $(EPOCROOT)/epoc32/tools/stringtable.pl" type="script"/>	
 		
 		<!-- link to bld.inf and mmp platform names -->
-		<set name='TRADITIONAL_PLATFORM' value='WINSCW'/>
+		<set name="TRADITIONAL_PLATFORM" value="WINSCW"/>
 
 		<!-- interfaces -->
 		<set name="INTERFACE.ani" value="Emulator.ani"/>
@@ -45,97 +52,96 @@
 		<set name="INTERFACE.resource" value="Emulator.resource"/>
 		<set name="INTERFACE.textnotifier2" value="Emulator.textnotifier2"/>
 		<set name="INTERFACE.var" value="Emulator.var"/>
-		<set name='CC' value='$(MWCC)'/>
-		<set name='CDEFS' value='__SYMBIAN32__ __CW32__ __WINS__ __WINSCW__ __SUPPORT_CPP_EXCEPTIONS__ _UNICODE $(MMPDEFS)'/>
-		<set name='CFLAGS' value='-c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source'/>
-		<set name='CW_DEFAULT_LIBS' value='gdi32.lib user32.lib kernel32.lib'/>
-		<set name='CW_RUNTIME_STATIC' value='msl_all_static_mse_symbian_d.lib'/>
-		<set name='CW_RUNTIME_NONSTATIC' value='MSL_All_x86_Symbian_D.lib'/>
-		<set name='DEFAULT_NORMAL_NEWLIB' value='scppnwdl.lib'/>
-		<set name='DEFAULT_SYSTEM_NEWLIB' value='scppnwdl_kern.lib'/>
-		<set name='EXPORT_TYPE' value='dllexport'/>
-		<set name='LD' value='$(MWLD)'/>
-		<set name='LFLAGS' value='-msgstyle gcc -stdlib -subsystem windows'/>
-		<set name='LFLAGS_INFGEN' value='-S -show only,names,unmangled,verbose '/>
-		<set name='LFLAGS_SYMGEN' value='-S -show only,names,verbose '/>
-		<set name='LINKPATH' value='winscw/udeb'/>
-		<set name='LISTING_OPTION' value='-S'/>
-		<set name='MMPDEFS' value=''/>
-		<set name='EPOCSTACKSIZE' value=''/>
-		<set name='NMAKE' value='nmake'/>
-		<set name='NMAKEFLAGS' value='-nologo -x - '/>
-		<set name='OPT.ADDCOMMAND' value='-addcommand '/>
-		<set name='OPT.CHECKLIB.STDCPP' value='stdc++'/>
-		<set name='OPT.CHECKLIB.SYMCPP' value='symc++'/>
-		<set name='OPT.CHECKLIB.WIN32' value='--coff'/>
-		<set name='OPT.HEAPCOMMIT' value='-heapcommit='/>
-		<set name='OPT.DEFINE' value='-d '/>
-		<set name='OPT.DEFFILE' value='-f '/>
-		<set name='OPT.DEPEND' value='-gccdepends -MD '/>
-		<set name='OPT.EXPORT' value='-export '/>
-		<set name='OPT.HEAPRESERVE' value='-heapreserve='/>
-		<set name='OPT.IMAGEBASE' value='-imagebase '/>
-		<set name='OPT.IMPLIB' value='-implib '/>
-		<set name='OPT.IMPORTLIB' value='-importlib '/>
-		<set name='OPT.LIBFILE' value='-l'/>
-		<set name='OPT.LIBPATH' value='-l '/>
-		<set name='OPT.LISTING' value='-S -show source,unmangled,comments '/>
-		<set name='OPT.MENTRYPOINT' value='-m '/>
-		<set name='OPT.MAINENTRYPOINT' value='-main '/>
-		<set name='OPT.MAP' value='-map '/>
-		<set name='OPT.NOCOMPACTIMPORTLIB' value='-nocompactimportlib '/>
-		<set name='OPT.NOENTRY' value='-noentry '/>
-		<set name='OPT.NOIMPLIB' value='-noimplib '/>
-		<set name='OPT.NOSTDINC' value='-nostdinc '/>
-		<set name='OPT.OUT' value='-o '/>
-		<set name='OPT.PREINCLUDE' value='-include '/>
-		<set name='OPT.RUNTIME' value='-runtime '/>
-		<set name='OPT.SEARCH' value='-search'/>
-		<set name='OPT.SHARED' value='-shared '/>
-		<set name='OPT.SPLITINCLUDE' value='-i-'/>
-		<set name='OPT.STATICLIBRARY' value='-library '/>
-		<set name='OPT.STDINC' value='-stdinc '/>
-		<set name='OPT.STDLIB' value='-stdlib '/>
-		<set name='OPT.SYM' value='-sym '/>
-		<set name='OPT.SYSINCLUDE' value='-i '/>
-		<set name='OPT.USERINCLUDE' value='-i '/>
-		<set name='OPT.WCHAR' value='-wchar_t '/>
-		<set name='OPT.WARNINGS' value='-warnings '/>
-		<set name='OUTPUTPATH' value='$(SBS_BUILD_DIR)'/>
-		<set name='BLDINF_OUTPUTPATH' value='$(SBS_BUILD_DIR)'/>
-		<set name='RC' value='$(MWWINRC)'/>
-		<set name='RELEASEPATH' value='$(EPOCROOT)/epoc32/release'/>
-		<set name='SBSV1MAKE' value='$(EPOCROOT)/epoc32/tools/make$(DOTEXE)'/>
-		<set name='STDCPP_DEF' value='__SYMBIAN_STDCPP_SUPPORT__'/>
-		<set name='STDCPP_INCLUDE' value='$(EPOCINCLUDE)/stdapis'/>
-		<set name='STDCPP_WCHAR_DEF' value='__wchar_t_defined'/>
-		<set name='SYMLOOKUPUTIL' value='$(PERL) $(EPOCROOT)/epoc32/tools/sym_lkup_util.pl'/>
-		<set name='SYMLOOKUPARGS' value='--ignore_export_dir'/>
-		<set name='SYSTEMINCLUDE' value=''/>
-		<set name='TARGET' value='TARGET_WAS_NOT_SET_PROPERLY'/>
-		<set name='TARGETPATH' value=''/>
-		<set name='TARGETTYPE' value='TARGETTYPE_WAS_NOT_SET_PROPERLY'/>
-		<set name='USERINCLUDE' value=''/>
-		<set name='VARIANTPLATFORM' value='winscw'/>
-		<set name='PLATMACROS.WINDOWS' value='CW32 WINS WINSCW'/>
-		<set name='PLATMACROS.LINUX' value='$(PLATMACROS.WINDOWS)'/>
+		
+		<set name="BLDINF_OUTPUTPATH" value="$(SBS_BUILD_DIR)"/>
+		<set name="CDEFS" value="__SYMBIAN32__ __CW32__ __WINS__ __WINSCW__ __SUPPORT_CPP_EXCEPTIONS__ _UNICODE $(MMPDEFS)"/>
+		<set name="CFLAGS" value="-c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source"/>
+		<set name="CW_DEFAULT_LIBS" value="gdi32.lib user32.lib kernel32.lib"/>
+		<set name="CW_RUNTIME_NONSTATIC" value="MSL_All_x86_Symbian_D.lib"/>
+		<set name="CW_RUNTIME_STATIC" value="msl_all_static_mse_symbian_d.lib"/>
+		<set name="DEFAULT_NORMAL_NEWLIB" value="scppnwdl.lib"/>
+		<set name="DEFAULT_SYSTEM_NEWLIB" value="scppnwdl_kern.lib"/>
+		<set name="EPOCSTACKSIZE" value=""/>
+		<set name="EXPORT_TYPE" value="dllexport"/>
+		<set name="LFLAGS" value="-msgstyle gcc -stdlib -subsystem windows"/>
+		<set name="LFLAGS_INFGEN" value="-S -show only,names,unmangled,verbose "/>
+		<set name="LFLAGS_SYMGEN" value="-S -show only,names,verbose "/>
+		<set name="LINKPATH" value="winscw/udeb"/>
+		<set name="LISTING_OPTION" value="-S"/>
+		<set name="MMPDEFS" value=""/>
+		<set name="NMAKE" value="nmake"/>
+		<set name="NMAKEFLAGS" value="-nologo -x - "/>
+		<set name="OPT.ADDCOMMAND" value="-addcommand "/>
+		<set name="OPT.CHECKLIB.STDCPP" value="stdc++"/>
+		<set name="OPT.CHECKLIB.SYMCPP" value="symc++"/>
+		<set name="OPT.CHECKLIB.WIN32" value="--coff"/>
+		<set name="OPT.DEFFILE" value="-f "/>
+		<set name="OPT.DEFINE" value="-d "/>
+		<set name="OPT.DEPEND" value="-gccdepends -MD "/>
+		<set name="OPT.EXPORT" value="-export "/>
+		<set name="OPT.HEAPCOMMIT" value="-heapcommit="/>
+		<set name="OPT.HEAPRESERVE" value="-heapreserve="/>
+		<set name="OPT.IMAGEBASE" value="-imagebase "/>
+		<set name="OPT.IMPLIB" value="-implib "/>
+		<set name="OPT.IMPORTLIB" value="-importlib "/>
+		<set name="OPT.LIBFILE" value="-l"/>
+		<set name="OPT.LIBPATH" value="-l "/>
+		<set name="OPT.LISTING" value="-S -show source,unmangled,comments "/>
+		<set name="OPT.MAINENTRYPOINT" value="-main "/>
+		<set name="OPT.MAP" value="-map "/>
+		<set name="OPT.MENTRYPOINT" value="-m "/>
+		<set name="OPT.NOCOMPACTIMPORTLIB" value="-nocompactimportlib "/>
+		<set name="OPT.NOENTRY" value="-noentry "/>
+		<set name="OPT.NOIMPLIB" value="-noimplib "/>
+		<set name="OPT.NOSTDINC" value="-nostdinc "/>
+		<set name="OPT.OUT" value="-o "/>
+		<set name="OPT.PREINCLUDE" value="-include "/>
+		<set name="OPT.RUNTIME" value="-runtime "/>
+		<set name="OPT.SEARCH" value="-search"/>
+		<set name="OPT.SHARED" value="-shared "/>
+		<set name="OPT.SPLITINCLUDE" value="-i-"/>
+		<set name="OPT.STATICLIBRARY" value="-library "/>
+		<set name="OPT.STDINC" value="-stdinc "/>
+		<set name="OPT.STDLIB" value="-stdlib "/>
+		<set name="OPT.SYM" value="-sym "/>
+		<set name="OPT.SYSINCLUDE" value="-i "/>
+		<set name="OPT.USERINCLUDE" value="-i "/>
+		<set name="OPT.WARNINGS" value="-warnings "/>
+		<set name="OPT.WCHAR" value="-wchar_t "/>
+		<set name="OUTPUTPATH" value="$(SBS_BUILD_DIR)"/>
+		<set name="RELEASEPATH" value="$(EPOCROOT)/epoc32/release"/>
+		<set name="STDCPP_DEF" value="__SYMBIAN_STDCPP_SUPPORT__"/>
+		<set name="STDCPP_INCLUDE" value="$(EPOCINCLUDE)/stdapis"/>
+		<set name="STDCPP_WCHAR_DEF" value="__wchar_t_defined"/>
+		<set name="SYMLOOKUPARGS" value="--ignore_export_dir"/>
+		<set name="SYMLOOKUPUTIL" value="$(PERL) $(EPOCROOT)/epoc32/tools/sym_lkup_util.pl"/>
+		<set name="SYSTEMINCLUDE" value=""/>
+		<set name="TARGET" value="TARGET_WAS_NOT_SET_PROPERLY"/>
+		<set name="TARGETPATH" value=""/>
+		<set name="TARGETTYPE" value="TARGETTYPE_WAS_NOT_SET_PROPERLY"/>
+		<set name="USERINCLUDE" value=""/>
+		<set name="VARIANTPLATFORM" value="winscw"/>
+		
+		<!-- macros -->
+		<set name="PLATMACROS.WINDOWS" value="CW32 WINS WINSCW"/>
+		<set name="PLATMACROS.LINUX" value="$(PLATMACROS.WINDOWS)"/>
 	</var>
 
 	<var name="winscw_udeb" extends="winscw_base">
-		<set name='FULLVARIANTPATH' value='winscw/udeb'/>
-		<set name='VARIANTTYPE' value='udeb'/>
+		<set name="FULLVARIANTPATH" value="winscw/udeb"/>
+		<set name="VARIANTTYPE" value="udeb"/>
 
-		<append name='CDEFS' value='_DEBUG'/>
-		<append name='CFLAGS' value='-g -O0 -inline off'/>
-		<append name='LFLAGS' value='-g'/>
+		<append name="CDEFS" value="_DEBUG"/>
+		<append name="CFLAGS" value="-g -O0 -inline off"/>
+		<append name="LFLAGS" value="-g"/>
 	</var>
 
 	<var name="winscw_urel" extends="winscw_base">
-		<set name='FULLVARIANTPATH' value='winscw/urel'/>
-		<set name='VARIANTTYPE' value='urel'/>
+		<set name="FULLVARIANTPATH" value="winscw/urel"/>
+		<set name="VARIANTTYPE" value="urel"/>
 
-		<append name='CDEFS' value='NDEBUG'/>
-		<append name='CFLAGS' value='-O4,s'/>
+		<append name="CDEFS" value="NDEBUG"/>
+		<append name="CFLAGS" value="-O4,s"/>
 	</var>
 
 	<group name="winscw">
--- a/sbsv2/raptor/lib/flm/base.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/flm/base.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -16,6 +16,7 @@
 		<param name='PROJECT_META' default=''/>     <!-- my.mmp  -->
 		<param name='DATE' default=''/>
 		<param name='DUMPBCINFO' default=''/>
+		<param name='FLMDEBUG'  default=''/>
 		<param name='PLATFORM' default=''/>
 		<param name='GNUMAKE38'/>
 		<param name='GNUCP'/>
--- a/sbsv2/raptor/lib/flm/e32abiv2.flm	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/flm/e32abiv2.flm	Fri Apr 16 19:32:39 2010 +0100
@@ -16,15 +16,37 @@
 #
 #
 
-# Only build feature invariant binaries in non-product builds *and*
-# Only build feature variant binaries in product builds.
+# Feature/Binary Variation
+#
+# FEATUREVARIANTNAME != "" implies a product build configuration
+# FEATUREVARIANT == 1 implies a .mmp defined feature variant binary
+#
+# By default:
+#   Build all binaries in non-product builds *and*
+#   Only build feature variant binaries in product builds.
+#
+#   test FEATUREVARIANTNAME=="" or FEATUREVARIANT==1
+#
+# If FEATUREVARIANTSAFE is set:
+#   Only build feature invariant binaries in non-product builds *and*
+#   Only build feature variant binaries in product builds.
 #
-# FEATUREVARIANTNAME != "" implies product build
-# FEATUREVARIANT == 1 implies a feature variant binary
+#   test (FEATUREVARIANTNAME=="" and FEATUREVARIANT=="") or
+#        (FEATUREVARIANTNAME!="" and FEATUREVARIANT==1)
 #
-# test FEATUREVARIANTNAME=="" or FEATUREVARIANT==1
-#
-ifneq ($(or $(call equal,$(FEATUREVARIANTNAME),),$(call equal,$(FEATUREVARIANT),1)),)
+
+DOBUILD:=
+ifeq ($(FEATUREVARIANTSAFE),)
+  DOBUILD:=$(if $(or $(call equal,$(FEATUREVARIANTNAME),),\
+                     $(call equal,$(FEATUREVARIANT),1)),1)
+else
+  DOBUILD:=$(if $(or $(and $(call equal,$(FEATUREVARIANTNAME),),\
+                           $(call equal,$(FEATUREVARIANT),)),\
+                     $(and $(call not,$(call equal,$(FEATUREVARIANTNAME),)),\
+                           $(call equal,$(FEATUREVARIANT),1))),1)
+endif
+
+ifeq ($(DOBUILD),1)
 
 $(if $(FLMDEBUG),$(info <flm name='e32abiv2' target='$(TARGET)' type='$(TARGETTYPE)' outputpath='$(OUTPUTPATH)' metasource='$(METASOURCE)' postlinkfiletype='$(POSTLINKFILETYPE)' />))
 
@@ -553,8 +575,7 @@
 # Targettype is some type of DLL or EXE (or derivative)
 ifneq ($(LINK_TARGET),)
 
-escaped_located_ARMLIBS:=$(foreach L,$(ARMLIBS),$(call ruleEscape,$(wildcard $(subst $(CHAR_SPACE),?,$(RVCTLIB)/*/$(L)))))
-quoted_located_ARMLIBS:=$(foreach L,$(ARMLIBS),$(call dblquoteitem,$(wildcard $(RVCTLIB)/*/$(L))))
+located_ARMLIBS:=$(foreach L,$(ARMLIBS),$(wildcard $(RVCTLIB)/*/$(L)))
 located_STATICLIBRARIES:=$(foreach L,$(STATICLIBRARY),$(STATIC_LIBRARY_DIR)/$(L).lib)
 e32abiv2_LIBS:=$(EXPTARGET) $(LINKER_STUB_LIBRARY) $(if $(STATIC_RUNTIME_LIB),$(STATIC_RUNTIME_DIR)/$(STATIC_RUNTIME_LIB),) $(located_STATICLIBRARIES)
 # DLLS and EXEs - These objects are linked by a linker
@@ -567,12 +588,10 @@
 REDUCED_RUNTIME_LIBS_LIST:=$(subst $(TARGET).dso,,$(RUNTIME_LIBS_LIST))
 
 ifeq ($(VARIANTTYPE),udeb)
-  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY_DEBUG)) $(addprefix $(RUNTIME_LIBS_PATH)/,$(REDUCED_RUNTIME_LIBS_LIST)) 
+  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY_DEBUG)) $(addprefix $(RUNTIME_LIBS_PATH)/,$(REDUCED_RUNTIME_LIBS_LIST)) $(located_ARMLIBS)
 else
-  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY)) $(addprefix $(RUNTIME_LIBS_PATH)/,$(REDUCED_RUNTIME_LIBS_LIST)) 
+  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY)) $(addprefix $(RUNTIME_LIBS_PATH)/,$(REDUCED_RUNTIME_LIBS_LIST)) $(located_ARMLIBS)
 endif
-quoted_e32abiv2_LIBS=$(e32abiv2_LIBS) $(quoted_located_ARMLIBS)
-escaped_e32abiv2_LIBS=$(e32abiv2_LIBS) $(escaped_located_ARMLIBS)
 
 else
 # NORMAL
@@ -585,19 +604,16 @@
 ifeq ($(HAS_DEDICATED_OP_NEWDEL_LIB),1)
   e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(RUNTIME_LIBS_PATH)/,$(NEWLIB))
 endif
-quoted_e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(RUNTIME_LIBS_PATH)/,$(RUNTIME_LIBS_LIST)) $(call addquotedprefix,$(STATIC_LIBS_PATH)/,$(STATIC_LIBS_LIST)) $(quoted_located_ARMLIBS)
-escaped_e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(RUNTIME_LIBS_PATH)/,$(RUNTIME_LIBS_LIST)) $(addprefix $(call ruleEscape,$(STATIC_LIBS_PATH)/),$(STATIC_LIBS_LIST)) $(escaped_located_ARMLIBS)
+e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(RUNTIME_LIBS_PATH)/,$(RUNTIME_LIBS_LIST)) $(addprefix $(STATIC_LIBS_PATH)/,$(STATIC_LIBS_LIST)) $(located_ARMLIBS)
 
 endif
 else
 # ARM RUNTIME LIBS
 ifeq ($(VARIANTTYPE),udeb)
-  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY_DEBUG)) 
+  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY_DEBUG)) $(located_ARMLIBS)
 else
-  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY))
+  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY)) $(located_ARMLIBS)
 endif
-quoted_e32abiv2_LIBS=$(e32abiv2_LIBS) $(quoted_located_ARMLIBS)
-escaped_e32abiv2_LIBS=$(e32abiv2_LIBS) $(escaped_located_ARMLIBS)
 endif
 
 # NOTE: the groupin10 macro must be used before a call to the "startrule" macro
@@ -607,7 +623,7 @@
 # outside the relevant tags but it is also unavoidable.
 define linktarget_func
 ## The actual link target, dependencies and build step
-$(E32TARGET): $(POSTLINKDEFFILE) $(ELF2E32) $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT) $(CIAFILES_LINKOBJECTS),$(LINKOBJECTS)) $(escaped_e32abiv2_LIBS) $(LINKER_ENTRYPOINT_LIBDEP) $(if $(SUPPORTS_STDCPP_NEWLIB),$(CHECKLIB)) $(if $(LINKERFEEDBACK_STAGE2),$(FEEDBACKFILE),) $(if $(HAVE_ORDERONLY),|,) $(EPOCROOT)/epoc32/build/TEM_LIB
+$(E32TARGET): $(POSTLINKDEFFILE) $(ELF2E32) $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT) $(CIAFILES_LINKOBJECTS),$(LINKOBJECTS)) $(e32abiv2_LIBS) $(LINKER_ENTRYPOINT_LIBDEP) $(if $(SUPPORTS_STDCPP_NEWLIB),$(CHECKLIB)) $(if $(LINKERFEEDBACK_STAGE2),$(FEEDBACKFILE),) $(if $(HAVE_ORDERONLY),|,) $(EPOCROOT)/epoc32/build/TEM_LIB
 	$(if $(MULTIFILE_ENABLED),,@echo -n "" > $(VIAFILE);
 	$(call groupin10,$(LINKOBJECTS)) ;)
 	$(call startrule,linkandpostlink) \
@@ -627,7 +643,7 @@
 	  $(if $(MULTIFILE_ENABLED),$(call dblquote,$(MULTIFILEOBJECT) $(CIAFILES_LINKOBJECTS)),$(COMMANDFILE_OPTION)$(call dblquote,$(VIAFILE))) \
       $(if $(GENERATELINKERFEEDBACK),$(FEEDBACK_OPTION)$(call dblquote,$(FEEDBACKFILE))) \
 	  $(if $(LINKER_ADD_STATIC_RUNTIME),$(if $(STATIC_RUNTIME_LIB),$(LINKER_GROUP_START_OPTION) $(STATIC_RUNTIME_DIR)/$(STATIC_RUNTIME_LIB) $(LINKER_GROUP_END_OPTION),)) \
-	  $(quoted_e32abiv2_LIBS) $(LINKER_DEFAULT_LIBS) && \
+	  $(call dblquote,$(e32abiv2_LIBS)) $(LINKER_DEFAULT_LIBS) && \
 	  $(ELF2E32) \
 	  --sid=0x$(if $(SID),$(SID),$(if $(UID3),$(UID3),0)) \
 	  --version=$(VERSION) \
@@ -768,7 +784,7 @@
 			$(if $(USE_PROFILER_FEEDBACK),--profile=$(call dblquote,$(ARM_PROFILER_FILE)),) \
 			$(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS))				\
 			$(if $(PREINCLUDE),$(PREINCLUDE_OPTION) ,)$(call concat, $(PREINCLUDE_OPTION) ,$(call dblquote,$(PREINCLUDE)))\
-			$(if $(SET_ARMINC),$(if $(RVCTINC),$(COMPILER_SYSTEM_INCLUDE_OPTION)$(call dblquoteitem,$(RVCTINC)),),)       \
+			$(if $(SET_ARMINC),$(if $(RVCTINC),$(COMPILER_SYSTEM_INCLUDE_OPTION)$(call dblquote,$(RVCTINC)),),)       \
 			$(COMPILER_SYSTEM_INCLUDE_OPTION)$$(call dblquote,$$(<D))                                                      \
 			$(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(USERINCLUDE)))      \
 			$(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(SYSTEMINCLUDE)))  \
@@ -864,7 +880,7 @@
 			$(OPTION_COMPILER) 						\
 			$(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS))				\
 			$(if $(PREINCLUDE),$(PREINCLUDE_OPTION) ,)$(call concat, $(PREINCLUDE_OPTION) ,$(call dblquote,$(PREINCLUDE)))\
-			$(if $(SET_ARMINC),$(if $(RVCTINC),$(COMPILER_SYSTEM_INCLUDE_OPTION)$(call dblquoteitem,$(RVCTINC)),),)       \
+			$(if $(SET_ARMINC),$(if $(RVCTINC),$(COMPILER_SYSTEM_INCLUDE_OPTION)$(call dblquote,$(RVCTINC)),),)       \
 			$(COMPILER_SYSTEM_INCLUDE_OPTION)$$(call dblquote,$$(<D))                                                   \
 			$(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(USERINCLUDE)))      \
 			$(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(SYSTEMINCLUDE)))  \
@@ -985,7 +1001,7 @@
        $(if $(PREINCLUDE),$(PREINCLUDE_OPTION) ,)$$(call concat, $(PREINCLUDE_OPTION) ,$$(call dblquote,$(PREINCLUDE))) \
        $(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(USERINCLUDE))) \
        $(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(SYSTEMINCLUDE))) \
-       $(if $(ARMINC),$(if $(RVCTINC), $(COMPILER_SYSTEM_INCLUDE_OPTION)$$(call dblquoteitem,$(RVCTINC)),),) )
+       $(if $(ARMINC),$(if $(RVCTINC), $(COMPILER_SYSTEM_INCLUDE_OPTION)$$(call dblquote,$(RVCTINC)),),) )
 
 
 $(e32abiv2_PREFILE): $1 $(PROJECT_META) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
@@ -1250,7 +1266,7 @@
 # For the --what option and the log file
 $(call raptor_release,$(filter-out %.sym,$(WHATRELEASE)))
 
-endif # FEATUREVARIANTNAME=="" or FEATUREVARIANT==1
+endif # DOBUILD
 
 ## The End
 
--- a/sbsv2/raptor/lib/flm/e32abiv2ani.flm	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/flm/e32abiv2ani.flm	Fri Apr 16 19:32:39 2010 +0100
@@ -25,7 +25,7 @@
 POSTLINKFILETYPE:=ani
 DOPOSTLINK:=1
 AUTOEXPORTS:=_Z15CreateCAnimDllLv,1;
-DEFFILE:=
+
 
 # Determine what kind of entrypoint option to set
 LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
--- a/sbsv2/raptor/lib/flm/e32abiv2exe.flm	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/flm/e32abiv2exe.flm	Fri Apr 16 19:32:39 2010 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -34,7 +34,11 @@
 LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
 endif
 
-STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+ifeq ($(EPOCNESTEDEXCEPTIONS),)
+  STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+else
+  STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB_NESTED_EXCEPTIONS)
+endif
 
 $(call vsave,CDEFS)
 CDEFS:=$(CDEFS) __EXE__
--- a/sbsv2/raptor/lib/flm/e32abiv2stdexe.flm	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/flm/e32abiv2stdexe.flm	Fri Apr 16 19:32:39 2010 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -35,7 +35,12 @@
 LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
 endif
 
-STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+ifeq ($(EPOCNESTEDEXCEPTIONS),)
+  STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+else
+  STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB_NESTED_EXCEPTIONS)
+endif
+
 NAMEDSYMLKUP:=1
 LIBRARY:=$(LIBRARY) euser.dso
 
--- a/sbsv2/raptor/lib/flm/msvctools.flm	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/flm/msvctools.flm	Fri Apr 16 19:32:39 2010 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -28,7 +28,7 @@
 $(call makepath,$(RELEASEPATH))
 $(call makepath,$(BUILDPATH))
 
-RELEASEABLES:=$(RELEASEABLES) $(RELEASETARGET)
+RELEASABLES:=$(RELEASABLES) $(RELEASETARGET)
 
 GENDEBUGINFO:=$(if $(findstring deb,$(VARIANTTYPE)),1,)
 
@@ -58,10 +58,6 @@
 # macros
 DEFINES:=$(call makemacrodef,$(OPT.DEFINE),$(CDEFS) $(BASE_MACRO) $(CFLAGS.ADD))
 
-# other
-PDBFILE:=$(if $(GENDEBUGINFO),$(RELEASEPATH)/$(TARGET).pdb,)
-CLEANTARGETS:=$(CLEANTARGETS) $(PDBFILE)
-
 #compile
 define msvctoolscompile
   $(BUILDPATH)/$(basename $(notdir $(1))).obj: $(1) $(PROJECT_META) $(if $(HAVE_ORDERONLY),|,)  EXPORT
@@ -70,7 +66,6 @@
 	$(if $(findstring staticlib,$(BASE_TYPE)),,$(CFLAGS.LIB)) \
 	$(CFLAGS) $$(subst /,-,$(OPTION_MSVC)) \
 	$(if $(findstring /W,$(OPTION_MSVC)),,$(CFLAGS.DEFAULT.WARNLEVEL)) \
-	$(if $(PDBFILE),$$(call msvcformatarg,$(OPT.PDBFILE),$(PDBFILE)),) \
 	$(DEFINES) $(INCLUDES) \
 	$$(call msvcformatarg,$(OPT.BROWSEFILE),$(BUILDPATH)/$(basename $(notdir $(1))).sbr) \
 	$$(call msvcformatarg,$(OPT.OBJECTFILE),$$@) $(1) \
@@ -156,7 +151,7 @@
 
 ifneq ($(INSTALLPATH),)
   INSTALLTARGET:=$(INSTALLPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
-  RELEASEABLES:=$(RELEASEABLES) $(INSTALLTARGET)
+  RELEASABLES:=$(RELEASABLES) $(INSTALLTARGET)
 
   define msvctoolsinstall
     $(INSTALLTARGET): $(RELEASETARGET)
@@ -179,7 +174,7 @@
   BSCFILE:=$(RELEASEPATH)/$(TARGET).bsc
   BSCRESPONSEFILE:=$(BUILDPATH)/$(TARGET).brf
   CLEANTARGETS:=$(CLEANTARGETS) $(BSCRESPONSEFILE)
-  RELEASEABLES:=$(RELEASEABLES) $(BSCFILE)
+  RELEASABLES:=$(RELEASABLES) $(BSCFILE)
 
   define msvctoolsgenbrowse  
     $(BSCFILE): $(OBJFILES)
@@ -197,8 +192,8 @@
 
 # Global targets
 .PHONY:: $(ALLTARGET)
-$(ALLTARGET):: $(RELEASEABLES)
-TARGET:: $(RELEASEABLES)
+$(ALLTARGET):: $(RELEASABLES)
+TARGET:: $(RELEASABLES)
 
 ifeq ($(BASE_TYPE),staticlib)
   LIBRARY:: $(RELEASETARGET) $(INSTALLTARGET)
--- a/sbsv2/raptor/lib/flm/msvctools.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/flm/msvctools.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -42,7 +42,6 @@
 		<param name='OPT.LISTING'/>
 		<param name='OPT.OBJECTFILE'/>
 		<param name='OPT.OUTFILE'/>
-		<param name='OPT.PDBFILE'/>
 		<param name='OPT.PREINCLUDE'/>
 		<param name='OPT.SUBSYSTEM'/>
 		<param name='OPT.SYSINCLUDE'/>
--- a/sbsv2/raptor/lib/flm/resource.flm	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/flm/resource.flm	Fri Apr 16 19:32:39 2010 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -112,7 +112,7 @@
 $(call makepath,$(INTERBASE))
 
 # common pre-processor options
-CPPOPT:=-nostdinc -undef -D_UNICODE -include $(PRODUCT_INCLUDE)\
+CPPOPT:=-nostdinc -undef -Wno-trigraphs -D_UNICODE -include $(PRODUCT_INCLUDE)\
  -I$(dir $(SOURCE)) $(foreach I, $(USERINCLUDE),-I$(I) ) -I- $(foreach J,$(SYSTEMINCLUDE),-I$(J) )
 
 CREATABLEPATHS:=$(RSCDIR) $(RSGDIR) $(OUTPUTPATH)
--- a/sbsv2/raptor/lib/flm/standard.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/flm/standard.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -60,6 +60,7 @@
 		<param name='EPOCSTACKSIZE' default=''/>
 		<param name='EPOCFIXEDPROCESS' default=''/>
 		<param name='EPOCALLOWDLLDATA' default=''/>
+		<param name='EPOCNESTEDEXCEPTIONS' default=''/>
 		<param name='PLATMACROS.WINDOWS' default=''/>
 		<param name='PLATMACROS.LINUX' default=''/>
 		<param name='STDCPP' default=''/>
@@ -116,6 +117,7 @@
 		<param name='FEATURELISTFILES' default=''/>
 		<param name='FEATUREVARIANT' default=''/>
 		<param name='FEATUREVARIANTNAME' default=''/>
+		<param name='FEATUREVARIANTSAFE' default=''/>
 		<param name='FPMODE_OPTION'/>
 		<param name='FROMELF'/>
 		<param name='FULLVARIANTPATH'/>
@@ -171,6 +173,7 @@
 		<param name='SPLIT_OPTION'/>
 		<param name='KERNEL_STATIC_RUNTIME_LIB'/>
 		<param name='USER_STATIC_RUNTIME_LIB'/>
+		<param name='USER_STATIC_RUNTIME_LIB_NESTED_EXCEPTIONS'/>
 		<param name='STATIC_LIBS_LIST'/>
 		<param name='STATIC_LIBS_PATH'/>
 		<param name='STATIC_LIBRARY_DIR'/>
--- a/sbsv2/raptor/lib/flm/tools.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/flm/tools.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -27,6 +27,7 @@
 		<param name='SYSTEMINCLUDE' default=''/>
 		<param name='TARGET'/>
 		<param name='TOOLSPATH'/>
+		<param name='TOOLS2WIN32' default=''/>
 		<param name='USERINCLUDE' default=''/>
 		<param name='PRODUCT_INCLUDE' default=''/>
 		<param name='PLATMACROS.WINDOWS'/>
@@ -35,6 +36,7 @@
 	</interface>
 
 	<interface name="Tools.exe" extends="Tools.common" flm="tools2exe.flm">
+		<param name='DOTEXE'/>
 		<param name='LINKER'/>
 		<param name='LFLAGS'/>
 		<param name='LIBS.WIN32' default=''/>
--- a/sbsv2/raptor/lib/flm/tools2common.flm	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/flm/tools2common.flm	Fri Apr 16 19:32:39 2010 +0100
@@ -18,17 +18,28 @@
 
 ## Input parameters
 
+ifeq ($(filter win,$(HOSTPLATFORM)),win)
+CDEFS.TOOLS2:=$(CDEFS.WIN32) $(CDEFS)
+CFLAGS:=$(CFLAGS.WIN32) $(CFLAGS) $(OPTION_GCC)
+COMPILER_PATH:=$(COMPILER_PATH.WIN32)
 OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)_$(TARGETTYPE)/tools2/$(VARIANTTYPE)$(TOOLPLATFORMDIR)
-
-ifeq ($(OSTYPE),cygwin)
+else
+ifneq ($(TOOLS2WIN32),)
+# Build win32 tools in Linux
 CDEFS.TOOLS2:=$(CDEFS.WIN32) $(CDEFS)
 CFLAGS:=$(CFLAGS.WIN32) $(CFLAGS) $(OPTION_GCC)
 COMPILER_PATH:=$(COMPILER_PATH.WIN32)
+OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)_$(TARGETTYPE)/tools2/$(VARIANTTYPE)
 else
+# Build linux tools in Linux
 CDEFS.TOOLS2:=$(CDEFS.LINUX) $(CDEFS)
 CFLAGS:=$(CFLAGS) $(OPTION_GCC)
 COMPILER_PATH=$(COMPILER_PATH.LINUX)
+OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)_$(TARGETTYPE)/tools2/$(VARIANTTYPE)$(TOOLPLATFORMDIR)
 endif
+endif
+
+
 CDEFS.TOOLS2:=$(call makemacrodef,$(OPT.D),$(CDEFS.TOOLS2))
 
 ## Locally used variables
--- a/sbsv2/raptor/lib/flm/tools2exe.flm	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/lib/flm/tools2exe.flm	Fri Apr 16 19:32:39 2010 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -16,11 +16,18 @@
 #
 
 ## Outputs - externally relevant targets that this FLM generates
-ifeq ($(OSTYPE),cygwin)
+ifeq ($(filter win,$(HOSTPLATFORM)),win)
 SYSTEMLIBS:=$(LIBS.WIN32)
 else
+ifneq ($(TOOLS2WIN32),)
+# Build win32 tools in Linux 
+SYSTEMLIBS:=$(LIBS.WIN32)
+else
+# Build linux tools in Linux
 SYSTEMLIBS:=$(LIBS.LINUX)
 endif
+endif
+
 
 EXETARGET:=$(RELEASEPATH)/$(TARGET)$(DOTEXE)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/license.txt	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,8 @@
+Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+All rights reserved.
+
+This component and the accompanying materials are made available
+under the terms of the License "Eclipse Public License v1.0"
+which accompanies this distribution, and is available
+at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/cross_compiling_tools.txt	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,7 @@
+
+To build tools for Windows and Linux, on Linux, use
+
+sbs -c tools2.win32 -c tools2
+
+You will also need the mingw32 package, for the cross-compiler.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/cygwin_1_7.txt	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,17 @@
+
+Starting with Raptor 2.13.0, it is also possible to use Cygwin 1.7 instead of
+Cygwin 1.5. Some work was necessary to add support for Cygwin 1.7 due to a
+change in command line interface in some of the Cygwin tools.
+ 
+Due to this change in the command line interface, we have had to introduce the
+SBS_CYGWIN17 environment variable whose value should be the root directory of
+the Cygwin 1.7 installation. We hope this is temporary and that we can remove
+this at some point. The following bullet points indicate the order of
+precedence of the SBS_CYGWIN and SBS_CYGWIN17 environment variables.
+ 
+* SBS_CYGWIN set,   SBS_CYGWIN17 unset: assume Cygwin 1.5 is being used
+* SBS_CYGWIN set,   SBS_CYGWIN17 set:   assume Cygwin 1.7 is being used
+* SBS_CYGWIN unset, SBS_CYGWIN17 set:   assume Cygwin 1.7 is being used
+ 
+You will get errors if you set SBS_CYGWIN to be the root of a Cygwin 1.7
+installation directory and if SBS_CYGWIN17 is not defined correctly.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/epocnestedexceptions.txt	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,10 @@
+
+Qt needs to be able to have more than one active exception object, even when
+OOM (out-of-memory).
+
+A detailed overview of the solution can be found at 
+http://wikis.in.nokia.com/Toolchain/QtExceptionHandling
+
+In short, we add a new MMP flag keyword - EPOCNESTEDEXCEPTIONS. When this
+keyword is specified, a different static run-time library is used.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/featurevariantsafe.txt	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,12 @@
+
+By default, .mmp files that include FEATUREVARIANT will generate binaries for
+both "normal", non-binary variant, build configurations and binary variant
+build configurations.
+
+In order to ensure that only invariant binaries are created for invariant
+build configurations, and variant binaries for variant build configurations,
+the optional setting FEATUREVARIANTSAFE can be used. FEATUREVARIANTSAFE can be
+set via an os_properties.xml file and, when set, variant binaries will no
+longer be created for invariant build configurations.
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/system_definition_v3.txt	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,8 @@
+
+System Definition version 3 Support
+
+This is only prototype support for testing the reading of single 
+"package" files. The implementation was submitted by Bob Rosenberg
+and has been regression tested by the Raptor team. Testing on real
+sysdef files is being carried out by the Symbian Foundation.
+
--- a/sbsv2/raptor/python/generic_path.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/python/generic_path.py	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -19,6 +19,7 @@
 import sys
 import re
 import types
+import ctypes
 
 # are we on windows, and if so what is the current drive letter
 isWin = sys.platform.lower().startswith("win")
@@ -265,7 +266,37 @@
 
 		return self.path
 
+	def GetSpaceSafePath(self):
+		"""Returns a version of the path where spaces don't interfere with shell interpretation.
+		
+		This functionality only applies to Windows - paths containing spaces are assumed to be problematic
+		on non-Windows platforms.
+		
+		On Windows, the path is returned in Windows-specific 8.3 short path form - tilde are used to replace
+		spaces and fit path elements within 8.3 requirements.  As 8.3 format paths are not guaranteed to be
+		supported on all Windows installs, and can only be calculated if they exist, a newly formated path is
+		only returned if it is returned by the Windows API and tested to exist.
+		"""
+		
+		if not isWin:
+			return None
+		
+		from ctypes.wintypes import DWORD, LPSTR, MAX_PATH
 
+		GetShortPathNameA = ctypes.windll.kernel32.GetShortPathNameA
+		GetShortPathNameA.restype = DWORD
+		GetShortPathNameA.argtypes = LPSTR, LPSTR, DWORD
+		
+		buffer = ctypes.create_string_buffer(MAX_PATH)
+		GetShortPathNameA(self.path, buffer, MAX_PATH)
+		
+		spacesafe = buffer.value
+		
+		if not spacesafe or not os.path.exists(spacesafe):
+			return None
+		
+		return spacesafe
+		
 # Module functions
 
 def Join(*arguments):
--- a/sbsv2/raptor/python/mmpparser.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/python/mmpparser.py	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -143,6 +143,7 @@
 			CaselessKeyword('EPOCALLOWDLLDATA') ^ \
 			CaselessKeyword('EPOCCALLDLLENTRYPOINTS') ^ \
 			CaselessKeyword('EPOCFIXEDPROCESS') ^ \
+			CaselessKeyword('EPOCNESTEDEXCEPTIONS') ^ \
 			CaselessKeyword('EXPORTUNFROZEN') ^ \
 			CaselessKeyword('FEATUREVARIANT') ^ \
 			CaselessKeyword('BYTEPAIRCOMPRESSTARGET') ^ \
--- a/sbsv2/raptor/python/plugins/filter_terminal.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/python/plugins/filter_terminal.py	Fri Apr 16 19:32:39 2010 +0100
@@ -161,7 +161,7 @@
 
 		# list of strings to catch recipe warnings (must be lowercase)
 		self.recipe_warning_expr = ["warning:"]
-
+		
 	def isMakeWarning(self, text):
                 """A simple test for warnings.
                 Can be extended do to more comprehensive checking."""
@@ -201,6 +201,9 @@
 		if self.raptor.quiet:
 			self.quiet = True
 		
+		# the build configurations which were reported
+		self.built_configs = []
+		
 		# keep count of errors and warnings
 		self.err_count = 0
 		self.warn_count = 0
@@ -393,7 +396,9 @@
 				self.recipeBody.append(text)
 			else:
 				self.recipelineExceeded += 1
-
+		elif text.startswith("<info>Buildable configuration '"):
+			# <info>Buildable configuration 'name'</info>
+			self.built_configs.append(text[30:-8])
 
 	def logit(self):
 		""" log a message """
@@ -432,11 +437,14 @@
 		if self.warn_count > 0 or self.err_count > 0:
 			sys.stdout.write("\n%s : warnings: %s\n" % (raptor.name,
 					self.warn_count))
-			sys.stdout.write("%s : errors: %s\n" % (raptor.name,
+			sys.stdout.write("%s : errors: %s\n\n" % (raptor.name,
 					self.err_count))
 		else:
-			sys.stdout.write("\nno warnings or errors\n")
+			sys.stdout.write("\nno warnings or errors\n\n")
 
+		for bc in self.built_configs:
+			sys.stdout.write("built " + bc + "\n")
+			
 		sys.stdout.write("\nRun time %d seconds\n" % self.raptor.runtime);
 		sys.stdout.write("\n")
 		return True
--- a/sbsv2/raptor/python/raptor.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/python/raptor.py	Fri Apr 16 19:32:39 2010 +0100
@@ -42,7 +42,6 @@
 import sys
 import types
 import time
-import re
 import traceback
 import pluginbox
 from xml.sax.saxutils import escape
@@ -232,8 +231,9 @@
 
 	def makefile(self, makefilename_base, engine, named = False):
 		"""Makefiles for individual mmps not feasible at the moment"""
-		pass # Cannot, currently, "unfurl an mmp" directly but do want
-		     # to be able to simulate the overall recursive unfurling of a build.
+		pass 
+		# Cannot, currently, "unfurl an mmp" directly but do want
+		# to be able to simulate the overall recursive unfurling of a build.
 
 class Component(ModelNode):
 	"""A group of projects or, in symbian-speak, a bld.inf.
@@ -321,7 +321,6 @@
 
 		# insert the start time into the Makefile name?
 
-		buildconfig = build.GetConfig("build").GenerateBuildUnits(build.cache)
 		self.configs = build.buildUnitsToBuild
 
 		# Pass certain CLI flags through to the makefile-generating sbs calls
@@ -385,8 +384,7 @@
 			makefile_path = str(build.topMakefile) + "_" + str(loop_number)
 			try:
 				os.unlink(makefile_path) # until we have dependencies working properly
-			except Exception,e:
-				# print "couldn't unlink %s: %s" %(componentMakefileName, str(e))
+			except Exception:
 				pass
 
 			# add some basic data in a component-wide variant
@@ -859,32 +857,6 @@
 
 		self.cache.Load(self.systemFLM)
 
-	def GetConfig(self, configname):
-		names = configname.split(".")
-
-		cache = self.cache
-
-		base = names[0]
-		mods = names[1:]
-
-		if base in cache.groups:
-			x = cache.FindNamedGroup(base)
-		elif base in cache.aliases:
-			x = cache.FindNamedAlias(base)
-		elif base in cache.variants:
-			x = cache.FindNamedVariant(base)
-		else:
-			raise Exception("Unknown build configuration '%s'" % configname)
-
-		x.ClearModifiers()
-
-
-		try:
-			for m in mods: x.AddModifier( cache.FindNamedVariant(m) )
-		except KeyError:
-			raise Exception("Unknown build configuration '%s'" % configname)
-		return x
-
 	def GetBuildUnitsToBuild(self, configNames):
 		"""Return a list of the configuration objects that correspond to the
 		   list of configuration names in the configNames parameter.
@@ -900,17 +872,7 @@
 			else:
 				configNames.append(self.defaultConfig)
 
-		buildUnitsToBuild = set()
-
-
-		for c in set(configNames):
-			self.Debug("BuildUnit: %s", c)
-			try:
-				x = self.GetConfig(c)
-				gb = x.GenerateBuildUnits(self.cache)
-				buildUnitsToBuild.update( gb )
-			except Exception, e:
-				self.FatalError(str(e))
+		buildUnitsToBuild = raptor_data.GetBuildUnits(configNames, self.cache, self)
 
 		for b in buildUnitsToBuild:
 			self.Info("Buildable configuration '%s'", b.name)
@@ -1003,7 +965,6 @@
 			dir = generic_path.Path(aDir)
 
 		bldInf = dir.Append(self.buildInformation)
-		componentgroup = []
 
 		if bldInf.isFile():
 			return bldInf
@@ -1150,7 +1111,7 @@
 				self.out.write(raptor_timing.Timing.discovery_string(object_type = object_type,
 						count = count))
 			except Exception, exception:
-				Error(exception.Text, function = "InfoDiscoveryTime")
+				self.Error(exception.Text, function = "InfoDiscoveryTime")
 
 	def InfoStartTime(self, object_type, task, key):
 		if self.timing:
@@ -1158,7 +1119,7 @@
 				self.out.write(raptor_timing.Timing.start_string(object_type = object_type,
 						task = task, key = key))
 			except Exception, exception:
-				Error(exception.Text, function = "InfoStartTime")
+				self.Error(exception.Text, function = "InfoStartTime")
 
 	def InfoEndTime(self, object_type, task, key):
 		if self.timing:
@@ -1166,7 +1127,7 @@
 				self.out.write(raptor_timing.Timing.end_string(object_type = object_type,
 						task = task, key = key))
 			except Exception, exception:
-				Error(exception.Text, function = "InfoEndTime")
+				self.Error(exception.Text, function = "InfoEndTime")
 
 	def Debug(self, format, *extras, **attributes):
 		"Send a debugging message to the configured channel"
@@ -1280,6 +1241,9 @@
 			self.AssertBuildOK()
 			buildUnitsToBuild = self.GetBuildUnitsToBuild(self.configNames)
 
+			if len(buildUnitsToBuild) == 0:
+				raise BuildCannotProgressException("No configurations to build.")
+			
 			self.buildUnitsToBuild = buildUnitsToBuild
 
 			# find out what components to build, and in what way
--- a/sbsv2/raptor/python/raptor_cli.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/python/raptor_cli.py	Fri Apr 16 19:32:39 2010 +0100
@@ -34,7 +34,7 @@
 # raptor_cli module attributes
 
 parser = OptionParser(prog = raptor.name,
-					  usage = """%prog [--help] [options] [variable=value] [target] ...
+					  usage = """%prog [--help] [options] [target] ...
 
 Targets:
 
@@ -247,13 +247,8 @@
 
 	# the leftover_args are either variable assignments of the form a=b
 	# or target names.
-	regex = re.compile("^(.+)=(.*)$")
 	for leftover in leftover_args:
-		assignment = regex.findall(leftover)
-		if len(assignment) > 0:
-			Raptor.SetEnv(assignment[0][0],assignment[0][1])
-		else:
-			Raptor.AddTarget(leftover)
+		Raptor.AddTarget(leftover)
 
 	# Define the dictionary of functions to be used.
 	# Attributes and function names can be added easily.
--- a/sbsv2/raptor/python/raptor_data.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/python/raptor_data.py	Fri Apr 16 19:32:39 2010 +0100
@@ -65,7 +65,7 @@
 
 # Make sure not to start up on an unsupported platform
 if not HostPlatform.IsKnown(HostPlatform.hostplatform):
-	raise Exception("raptor_data module loaded on an unrecognised platform '%s'. Expected one of %s" % (hostplatform, str(hostplatforms)))
+	raise Exception("raptor_data module loaded on an unrecognised platform '%s'. Expected one of %s" % (HostPlatform.hostplatform, str(HostPlatform.hostplatforms)))
 
 
 # raptor_data module classes
@@ -139,7 +139,13 @@
 		raise BadReferenceError()
 
 	def GetModifiers(self, cache):
-		return [ cache.FindNamedVariant(m) for m in self.modifiers ]
+		mods = []
+		for m in self.modifiers:
+			try:
+				mods.append(cache.FindNamedVariant(m))
+			except KeyError:
+				raise BadReferenceError(m)
+		return mods
 
 	def Valid(self):
 		return self.ref
@@ -710,7 +716,7 @@
 
 	def __str__(self):
 		attributes = "name='" + self.name + "' type='" + self.type + "'"
-		if default != None:
+		if self.default != None:
 			attributes += " default='" + self.default + "'"
 
 		if type == "tool":
@@ -724,19 +730,31 @@
 			value = os.environ[self.name]
 			
 			if value:
-				# if this value is a "path" or a "tool" then we need to make sure
-				# it is a proper absolute path in our preferred format.
-				if self.type == "path" or self.type == "tool":
+				if self.type in ["path", "tool", "toolchainpath"]:
+					# if this value is some sort of path or tool then we need to make sure
+					# it is a proper absolute path in our preferred format.
 					try:
 						path = generic_path.Path(value)
 						value = str(path.Absolute())
 					except ValueError,e:
-						raise BadToolValue("the environment variable %s is incorrect: %s" % (self.name, str(e)))				
-				# if this value ends in an un-escaped backslash, then it will be treated as a line continuation character
-				# in makefile parsing - un-escaped backslashes at the end of values are therefore escaped
+						raise BadToolValue("the environment variable %s is incorrect: %s" % (self.name, str(e)))
+					
+					if self.type in ["tool", "toolchainpath"]:
+						# if  we're dealing with tool-related values, then make sure that we can get "safe"
+						# versions if they contain spaces - if we can't, that's an error, as they won't
+						# survive full usage in the toolcheck or when used and/or referenced in FLMs						
+						if ' ' in value:
+							path = generic_path.Path(value)
+							spaceSafeValue = path.GetSpaceSafePath()
+						
+							if not spaceSafeValue:
+								raise BadToolValue("the environment variable %s is incorrect - it is a '%s' type but contains spaces that cannot be neutralised: %s" % (self.name, self.type, value))
+							
+							value = spaceSafeValue	
 				elif value.endswith('\\'):
-					# an odd number of backslashes means there's one to escape
-					count = len(value) - len(value.rstrip('\\'))
+					# if this value ends in an un-escaped backslash, then it will be treated as a line continuation character
+					# in makefile parsing - un-escaped backslashes at the end of values are therefore escaped					
+					count = len(value) - len(value.rstrip('\\'))	# an odd number of backslashes means there's one to escape
 					if count % 2:
 						value += '\\'	
 		except KeyError:
@@ -906,7 +924,6 @@
 		s += "</var>"
 		return s
 
-import traceback
 class VariantRef(Reference):
 
 	def __init__(self, ref=None):
@@ -918,7 +935,7 @@
 	def Resolve(self, cache):
 		try:
 			return cache.FindNamedVariant(self.ref)
-		except KeyError, e:
+		except KeyError:
 			raise BadReferenceError(self.ref)
 
 class MissingVariantException(Exception):
@@ -961,7 +978,7 @@
 					missing_variants.append(r.ref)
 				
 			if len(missing_variants) > 0:
-				raise MissingVariantException("Missing variants '%s'", " ".join(missing_variants))
+				raise MissingVariantException("Missing variants '%s'" % " ".join(missing_variants))
 
 	def GenerateBuildUnits(self, cache):
 		self.Resolve(cache)
@@ -1026,25 +1043,27 @@
 
 	def GenerateBuildUnits(self, cache):
 		units = []
-
+		
 		missing_variants = []
 		for r in self.childRefs:
-			refMods = r.GetModifiers(cache)
-
 			try:
 				obj = r.Resolve(cache=cache)
 			except BadReferenceError:
 				missing_variants.append(r.ref)
 			else:
 				obj.ClearModifiers()
+				try:
+					refMods = r.GetModifiers(cache)
+				except BadReferenceError,e:
+					missing_variants.append(str(e))
+				else:
+					for m in refMods + self.modifiers:
+						obj.AddModifier(m)
 
-				for m in refMods + self.modifiers:
-					obj.AddModifier(m)
-
-				units.extend( obj.GenerateBuildUnits(cache) )
+					units.extend( obj.GenerateBuildUnits(cache) )
 
 		if len(missing_variants) > 0:
-			raise MissingVariantException("Missing variants '%s'", " ".join(missing_variants))
+			raise MissingVariantException("Missing variants '%s'" % " ".join(missing_variants))
 
 		return units
 
@@ -1055,7 +1074,7 @@
 		Reference.__init__(self, ref)
 
 	def __str__(self):
-		return "<%s /><groupRef ref='%s' mod='%s'/>" % (prefix, self.ref, ".".join(self.modifiers))
+		return "<groupRef ref='%s' mod='%s'/>" % (self.ref, ".".join(self.modifiers))
 
 	def Resolve(self, cache):
 		try:
@@ -1063,6 +1082,81 @@
 		except KeyError:
 			raise BadReferenceError(self.ref)
 
+def GetBuildUnits(configNames, cache, logger):
+	"""expand a list of config strings like "arm.v5.urel" into a list
+	of BuildUnit objects that can be queried for settings.
+	
+	The expansion tries to be tolerant of errors in the XML so that a
+	typo in one part of a group does not invalidate the whole group.
+	"""
+	
+	# turn dot-separated name strings into Model objects (Group, Alias, Variant)
+	models = []
+		
+	for c in set(configNames):
+		ok = True
+		names = c.split(".")
+
+		base = names[0]
+		mods = names[1:]
+
+		if base in cache.groups:
+			x = cache.FindNamedGroup(base)
+		elif base in cache.aliases:
+			x = cache.FindNamedAlias(base)
+		elif base in cache.variants:
+			x = cache.FindNamedVariant(base)
+		else:
+			logger.Error("Unknown build configuration '%s'" % base)
+			continue
+
+		x.ClearModifiers()
+
+		for m in mods:
+			if m in cache.variants:
+				x.AddModifier( cache.FindNamedVariant(m) )
+			else:
+				logger.Error("Unknown build variant '%s'" % m)
+				ok = False
+				
+		if ok:
+			models.append(copy.copy(x))
+
+	# turn Model objects into BuildUnit objects
+	#
+	# all objects have a GenerateBuildUnits method but don't use
+	# that for Groups because it is not tolerant of errors (the
+	# first error raises an exception and the rest of the group is
+	# abandoned)
+	units = []
+		
+	while len(models) > 0:
+		x = models.pop()
+		try:
+			if isinstance(x, (Alias, Variant)):
+				# these we just turn straight into BuildUnits
+				units.extend(x.GenerateBuildUnits(cache))
+			elif isinstance(x, Group):
+				# deal with each part of the group separately (later)
+				for child in x.childRefs:
+					modChild = copy.copy(child)
+					modChild.modifiers = child.modifiers + [m.name for m in x.modifiers]
+					models.append(modChild)
+			elif isinstance(x, Reference):
+				# resolve references and their modifiers
+				try:
+					obj = x.Resolve(cache)
+					modObj = copy.copy(obj)
+					modObj.modifiers = x.GetModifiers(cache)
+				except BadReferenceError,e:
+					logger.Error("Unknown reference '%s'" % str(e))
+				else:
+					models.append(modObj)
+		except Exception, e:
+			logger.Error(str(e))
+
+	return units
+	
 class ToolErrorException(Exception):
 	def __init__(self, s):
 		Exception.__init__(self,s)
@@ -1364,6 +1458,9 @@
 class UninitialisedVariableException(Exception):
 	pass
 
+class RecursionException(Exception):
+	pass
+
 class Evaluator(object):
 	"""Determine the values of variables under different Configurations.
 	Either of specification and buildUnit may be None."""
@@ -1436,7 +1533,6 @@
 			for k, v in self.dict.items():
 				if v.find('$(' + k + ')') != -1:
 						raise RecursionException("Recursion Detected in variable '%s' in configuration '%s' " % (k,configName))
-						expanded = "RECURSIVE_INVALID_STRING"
 				else:
 					expanded = self.ExpandAll(v, specName, configName)
 
--- a/sbsv2/raptor/python/raptor_make.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/python/raptor_make.py	Fri Apr 16 19:32:39 2010 +0100
@@ -31,11 +31,99 @@
 import traceback
 import sys
 from xml.sax.saxutils import escape
+from xml.sax.saxutils import unescape
 
 
 class BadMakeEngineException(Exception):
 	pass
 
+def string_following(prefix, str):
+	"""If str starts with prefix then return the rest of str, otherwise None"""
+	if str.startswith(prefix):
+		return str[len(prefix):]
+	else:
+		return None
+
+def XMLEscapeLog(stream):
+	""" A generator that reads a raptor log from a stream and performs an XML escape
+	    on all text between tags, which is usually make output that could contain
+	    illegal characters that upset XML-based log parsers.
+	    This function yields "xml-safe" output line by line.
+	"""
+	inRecipe = False
+
+	for line in stream:
+		if line.startswith("<recipe"):
+			inRecipe = True
+		elif line.startswith("</recipe"):
+			inRecipe = False
+			
+		# unless we are inside a "recipe", any line not starting
+		# with "<" is free text that must be escaped.
+		if inRecipe or line.startswith("<"):
+			yield line
+		else:
+			yield escape(line)
+
+def AnnoFileParseOutput(annofile):
+	""" A generator that extracts log output from an emake annotation file, 
+	    perform an XML-unescape on it and "yields" it line by line.  """
+	af = open(annofile, "r")
+
+	inOutput = False
+
+	buildid = ""
+	for line in af:
+		line = line.rstrip("\n\r")
+
+
+		if not inOutput:
+			o = string_following("<output>", line)
+			if not o:
+				o = string_following('<output src="prog">', line)
+
+			if o:
+				inOutput = True	
+				yield unescape(o)+'\n'
+				continue
+
+
+			o = string_following('<build id="',line)
+			if o:
+				buildid = o[:o.find('"')]
+				yield "Starting build: "+buildid+"\n"
+				continue 
+
+			o = string_following('<metric name="duration">', line)
+			if o:
+				secs = int(o[:o.find('<')])
+				if secs != 0:
+					duration = "%d:%d" % (secs/60, secs % 60)
+				else:
+					duration = "0:0"
+				continue 
+
+
+			o = string_following('<metric name="clusterAvailability">', line)
+			if o:
+				availability = o[:o.find('<')]
+				continue 
+				
+		else:
+			end_output = line.find("</output>")
+		
+			if end_output != -1:
+				line = line[:end_output]
+				inOutput = False
+			
+			if line != "":	
+				yield unescape(line)+'\n'
+
+	yield "Finished build: %s   Duration: %s (m:s)   Cluster availability: %s%%\n" %(buildid,duration,availability)
+	af.close()
+
+
+
 # raptor_make module classes
 
 class MakeEngine(object):
@@ -82,6 +170,25 @@
 			self.jobsOption = evaluator.Get("jobs")
 			self.defaultMakeOptions = evaluator.Get("defaultoptions")
 
+			# Logging
+			#  copylogfromannofile means, for emake, that we should ignore 
+			# emake's console output and instead extract output from its annotation
+			# file.  This is a workaround for a problem where some emake
+			# console output is lost.  The annotation file has a copy of this
+			# output in the "parse" job and it turns out to be uncorrupted.
+			self.copyLogFromAnnoFile = (evaluator.Get("copylogfromannofile") == "true")
+			self.annoFileName = None
+
+			if self.copyLogFromAnnoFile:
+				for o in self.raptor.makeOptions:
+					self.annoFileName = string_following("--emake-annofile=", o)
+					if self.annoFileName:
+						self.raptor.Info("annofile: " + o)
+
+				if not self.annoFileName:
+					self.raptor.Info("Cannot copy log from annotation file as no annotation filename was specified via the option --mo=--emake-annofile=<filename>")
+					self.copyLogFromAnnoFile = False
+
 			# buffering
 			self.scrambled = (evaluator.Get("scrambled") == "true")
 
@@ -479,8 +586,16 @@
 			# clock skew messages from some build engines scatter their
 			# output across our xml.
 			stderrfilename = makefile+'.stderr'
+			stdoutfilename = makefile+'.stdout'
 			command += " 2>'%s' " % stderrfilename
 
+			# Keep a copy of the stdout too in the case of using the 
+			# annofile - so that we can trap the problem that
+			# makes the copy-log-from-annofile workaround necessary
+			# and perhaps determine when we can remove it.
+			if self.copyLogFromAnnoFile:
+				command += " >'%s' " % stdoutfilename
+
 			# Substitute the makefile name for any occurrence of #MAKEFILE#
 			command = command.replace("#MAKEFILE#", str(makefile))
 
@@ -518,28 +633,23 @@
 				stream = p.stdout
 
 				inRecipe = False
-				line = " "
-				while line:
-					line = stream.readline()
-					
-					if line.startswith("<recipe"):
-						inRecipe = True
-					elif line.startswith("</recipe"):
-						inRecipe = False
-					
-					# unless we are inside a "recipe", any line not starting
-					# with "<" is free text that must be escaped.
-					if inRecipe or line.startswith("<"):
-						self.raptor.out.write(line)
-					else:
-						self.raptor.out.write(escape(line))
+
+				if not self.copyLogFromAnnoFile:
+					for l in XMLEscapeLog(stream):
+						self.raptor.out.write(l)
+
+					returncode = p.wait()
+				else:
+					returncode = p.wait()
 
-				# should be done now
-				returncode = p.wait()
+					annofilename = self.annoFileName.replace("#MAKEFILE#", makefile)
+					self.raptor.Info("copylogfromannofile: Copying log from annotation file %s to work around a potential problem with the console output", annofilename)
+					try:
+						for l in XMLEscapeLog(AnnoFileParseOutput(annofilename)):
+							self.raptor.out.write(l)
+					except Exception,e:
+						self.raptor.Error("Couldn't complete stdout output from annofile %s for %s - '%s'", annofilename, command, str(e))
 
-				# Report end-time of the build
-				self.raptor.InfoEndTime(object_type = "makefile",
-						task = "build", key = str(makefile))
 
 				# Take all the stderr output that went into the .stderr file
 				# and put it back into the log, but safely so it can't mess up
@@ -551,6 +661,9 @@
 					e.close()
 				except Exception,e:
 					self.raptor.Error("Couldn't complete stderr output for %s - '%s'", command, str(e))
+				# Report end-time of the build
+				self.raptor.InfoEndTime(object_type = "makefile",
+						task = "build", key = str(makefile))
 
 				if returncode != 0  and not self.raptor.keepGoing:
 					self.Tidy()
@@ -560,7 +673,7 @@
 				self.raptor.Error("Exception '%s' during '%s'", str(e), command)
 				self.Tidy()
 				# Still report end-time of the build
-				self.raptor.InfoEnd(object_type = "Building", task = "Makefile",
+				self.raptor.InfoEndTime(object_type = "Building", task = "Makefile",
 						key = str(makefile))
 				return False
 
@@ -667,6 +780,8 @@
 				return False
 		return True
 
+
+
 # raptor_make module functions
 
 
--- a/sbsv2/raptor/python/raptor_meta.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/python/raptor_meta.py	Fri Apr 16 19:32:39 2010 +0100
@@ -1304,16 +1304,15 @@
 		elif varname == 'PAGED':
 			self.BuildVariant.AddOperation(raptor_data.Set(varname, "1"))
 			self.__debug( "Set switch PAGE ON")
+			# PAGED is equivalent to PAGEDCODE
 			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDCODE_OPTION", "paged"))
 			self.__debug( "Set switch PAGEDCODE ON")
-			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDDATA_OPTION", "paged"))
-			self.__debug( "Set data PAGEDDATA ON")
 			self.__pageConflict.append("PAGEDCODE")
-			self.__pageConflict.append("PAGEDDATA")
 
 		elif varname == 'UNPAGED':
 			self.BuildVariant.AddOperation(raptor_data.Set("PAGED", "0"))
 			self.__debug( "Set switch PAGED OFF")
+			# UNPAGED is equivalent to UNPAGEDCODE *and* UNPAGEDDATA
 			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDCODE_OPTION", "unpaged"))
 			self.__debug( "Set switch PAGEDCODE OFF")
 			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDDATA_OPTION", "unpaged"))
@@ -1335,6 +1334,7 @@
 			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDCODE_OPTION", "unpaged"))
 			self.__debug( "Set switch " + varname + " ON")
 			self.__pageConflict.append(varname)
+			
 		elif varname == 'UNPAGEDDATA':
 			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDDATA_OPTION", "unpaged"))
 			self.__debug( "Set switch " + varname + " ON")
@@ -1343,6 +1343,7 @@
 		elif varname == 'NOLINKTIMECODEGENERATION':
 			self.BuildVariant.AddOperation(raptor_data.Set("LTCG",""))
 			self.__debug( "Set switch " + varname + " OFF")
+			
 		elif varname == 'NOMULTIFILECOMPILATION':
 			self.BuildVariant.AddOperation(raptor_data.Set("MULTIFILE_ENABLED",""))
 			self.__debug( "Set switch " + varname + " OFF")
@@ -1352,21 +1353,19 @@
 				self.__debuggable = "udeb urel"
 			else:
 				self.__Raptor.Warn("DEBUGGABLE keyword ignored as DEBUGGABLE_UDEBONLY is already specified")
+		
 		elif varname == 'DEBUGGABLE_UDEBONLY':
 			if self.__debuggable != "":
 				self.__Raptor.Warn("DEBUGGABLE keyword has no effect as DEBUGGABLE or DEBUGGABLE_UDEBONLY is already set")
 			self.__debuggable = "udeb"
+		
 		elif varname == 'FEATUREVARIANT':
 			self.BuildVariant.AddOperation(raptor_data.Set(varname,"1"))
 			self.featureVariant = True
+		
 		elif varname in ['COMPRESSTARGET', 'NOCOMPRESSTARGET', 'INFLATECOMPRESSTARGET', 'BYTEPAIRCOMPRESSTARGET']:
-			if self.__compressionKeyword:
-				self.__Raptor.Warn("%s keyword in %s overrides earlier use of %s" % (varname, self.__currentMmpFile, self.__compressionKeyword))
-				self.BuildVariant.AddOperation(raptor_data.Set(self.__compressionKeyword,""))
-				self.__debug( "Set switch " + varname + " OFF")
-			self.BuildVariant.AddOperation(raptor_data.Set(varname,"1"))
-			self.__debug( "Set switch " + varname + " ON")
-			self.__compressionKeyword = varname
+			self.resolveCompressionKeyword(varname)
+		
 		else:
 			self.__debug( "Set switch "+toks[0]+" ON")
 			self.BuildVariant.AddOperation(raptor_data.Set(prefix+varname, "1"))
@@ -1722,7 +1721,7 @@
 	def getDefaultResourceTargetPath(self, targettype):
 		# the different default TARGETPATH values should come from the
 		# configuration rather than being hard-coded here.
-		if targettype == "plugin":
+		if targettype in ["plugin", "plugin3"]:
 			return "resource/plugins"
 		if targettype == "pdl":
 			return "resource/printers"
@@ -2247,12 +2246,21 @@
 			for x in self.__pageConflict:
 				if x == "PAGEDCODE" or x == "UNPAGEDCODE":
 					self.__Raptor.Warn("Both PAGEDCODE and UNPAGEDCODE are specified. The last one %s will take effect" % x)
+					if x == "PAGEDCODE":
+						self.resolveCompressionKeyword("BYTEPAIRCOMPRESSTARGET")
 					break
+		elif "PAGEDCODE" in self.__pageConflict:
+			self.resolveCompressionKeyword("BYTEPAIRCOMPRESSTARGET")
+				
 		if "PAGEDDATA" in self.__pageConflict and "UNPAGEDDATA" in self.__pageConflict:
 			for x in self.__pageConflict:
 				if x == "PAGEDDATA" or x == "UNPAGEDDATA":
 					self.__Raptor.Warn("Both PAGEDDATA and UNPAGEDDATA are specified. The last one %s will take effect" % x)
+					if x == "PAGEDDATA":
+						self.resolveCompressionKeyword("BYTEPAIRCOMPRESSTARGET")
 					break
+		elif "PAGEDDATA" in self.__pageConflict:
+			self.resolveCompressionKeyword("BYTEPAIRCOMPRESSTARGET")
 
 		# Set Debuggable
 		self.BuildVariant.AddOperation(raptor_data.Set("DEBUGGABLE", self.__debuggable))
@@ -2271,6 +2279,19 @@
 		"""Target type in lower case - the standard format"""
 		return self.__targettype.lower()
 
+	def resolveCompressionKeyword(self, aCompressionKeyword):
+		"""If a compression keyword is set more than once either explicitly
+		or implicitly a warning is given and the last one takes effect 
+		"""
+		if self.__compressionKeyword and self.__compressionKeyword != aCompressionKeyword:
+			self.__Raptor.Warn("%s keyword in %s overrides earlier use of %s" % \
+						(aCompressionKeyword, self.__currentMmpFile, self.__compressionKeyword))
+			self.BuildVariant.AddOperation(raptor_data.Set(self.__compressionKeyword, ""))
+			self.__debug( "Set switch " + self.__compressionKeyword + " OFF")
+		self.BuildVariant.AddOperation(raptor_data.Set(aCompressionKeyword,"1"))
+		self.__debug( "Set switch " + aCompressionKeyword + " ON")
+		self.__compressionKeyword = aCompressionKeyword
+
 	def checkImplibDefFile(self, defFile):
 		"""Project with target type implib must have DEFFILE defined 
 		explicitly or implicitly, otherwise it is an error
@@ -2396,9 +2417,19 @@
 		# "export platform" but several "build platforms" can be associated
 		# with the same "export platform".
 		exports = {}
-
-		self.__Raptor.Debug("MetaReader: configsToBuild:  %s", [b.name for b in configsToBuild])
-		for buildConfig in configsToBuild:
+		
+		# We sort configurations by name here.  This is solely to deal with situations
+		# where macros linked to builds end up being used in preprocessor conditionals
+		# within bld.inf files that then wrap exports under PRJ_EXPORTS statements.
+		# Having exports that are conditional on these macros isn't supported, but
+		# as there are areas of the source base that make this assumption, and
+		# fail if emulator macros are used instead of arm ones, we ensure that arm
+		# configurations come first when multiple configurations are active, and so are
+		# used first for determining exports.
+		sortedConfigsToBuild = sorted(configsToBuild,key=lambda config: config.name)
+
+		self.__Raptor.Debug("MetaReader: sortedConfigsToBuild:  %s", [b.name for b in sortedConfigsToBuild])
+		for buildConfig in sortedConfigsToBuild:
 			# get everything we need to know about the configuration
 			evaluator = self.__Raptor.GetEvaluator(None, buildConfig)
 
@@ -2968,7 +2999,7 @@
 			self.__Raptor.PrintXML("<zipmarker>" + markerfilename +	"</zipmarker>\n")
 			self.__Raptor.PrintXML("</clean>\n")
 
-		except IOError:
+		except IOError, e:
 			self.__Raptor.Warn("Problem while unzipping export %s to %s: %s",source,destination,str(e))
 
 		self.__Raptor.Info("Unzipped %d files from %s to %s", filecount, source, destination)
--- a/sbsv2/raptor/python/raptor_version.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/python/raptor_version.py	Fri Apr 16 19:32:39 2010 +0100
@@ -16,7 +16,7 @@
 
 # replace CHANGESET with the Hg changeset for ANY release
 
-version=(2,12,4,"2010-03-05","symbian build system","CHANGESET")
+version=(2,13,0,"2010-04-12","symbian build system","CHANGESET")
 
 def numericversion():
 	"""Raptor version string"""
--- a/sbsv2/raptor/python/raptor_xml.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/python/raptor_xml.py	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -144,25 +144,29 @@
 	"""Path sub-class that wraps up a component bld.inf file with
 	system_definition.xml context information."""
 
-	def __init__(self, aBldInfFile, aContainerNames, aSystemDefinitionFile, aSystemDefinitionBase, aSystemDefinitionVersion):
+	def __init__(self, aBldInfFile, aLayerName, aContainerNames, aSystemDefinitionFile, aSystemDefinitionBase, aSystemDefinitionVersion):
 		generic_path.Path.__init__(self, aBldInfFile.Absolute().path)
 		self.__ContainerNames = aContainerNames
+		self.__LayerName = aLayerName
 		self.__SystemDefinitionFile = aSystemDefinitionFile
-		self.__SystemDefinitionBase = aSystemDefinitionBase
-		self.__SystemDefinitionVersion = aSystemDefinitionVersion
+		self.__SystemDefinitionBase = aSystemDefinitionBase
+		self.__SystemDefinitionVersion = aSystemDefinitionVersion
 
 	def GetSystemDefinitionFile(self):
 		return self.__SystemDefinitionFile
 
 	def GetSystemDefinitionBase(self):
 		return self.__SystemDefinitionBase
-
-	def GetSystemDefinitionFile(self):
-		return self.__SystemDefinitionVersion
+
+	def GetSystemDefinitionVersion(self):
+		return self.__SystemDefinitionVersion
+
+	def GetLayerName(self):
+		return self.__LayerName
 
 	def GetContainerName(self, aContainerType):
 		if self.__ContainerNames.has_key(aContainerType):
-		  return self.__ContainerNames[aContainerType]
+			return self.__ContainerNames[aContainerType]
 		return ""
 
 
@@ -173,7 +177,8 @@
 		self.__Logger = aLogger
 		self.__SystemDefinitionFile = aSystemDefinitionFile.GetLocalString()
 		self.__SystemDefinitionBase = aSystemDefinitionBase.GetLocalString()
-		self.__Version = {'MAJOR':0,'MID':0,'MINOR':0}
+		self.__Version = {'MAJOR':0,'MID':0,'MINOR':0}
+		self.__IdAttribute = "name"
 		self.__ComponentRoot = ""
 		self.__TotalComponents = 0
 		self.__LayerList = []
@@ -263,42 +268,62 @@
 
 		if self.__Version['MAJOR'] == 1 and self.__Version['MID'] > 2:
 			self.__ComponentRoot = self.__SystemDefinitionBase
-		elif self.__Version['MAJOR'] == 2:
-			# 2.0.0 format supports SOURCEROOT as an environment specified base - we respect this, unless
-			# explicitly overridden on the command line
-			if os.environ.has_key('SOURCEROOT'):
+		elif self.__Version['MAJOR'] == 2 or self.__Version['MAJOR'] == 3:
+			# 2.0.x and 3.0.0 formats support SOURCEROOT or SRCROOT as an environment specified base - we respect this, unless
+			# explicitly overridden on the command line
+			if os.environ.has_key('SRCROOT'):
+				self.__ComponentRoot = generic_path.Path(os.environ['SRCROOT'])
+			elif os.environ.has_key('SOURCEROOT'):
 				self.__ComponentRoot = generic_path.Path(os.environ['SOURCEROOT'])
-			if self.__SystemDefinitionBase and self.__SystemDefinitionBase != ".":
-				self.__ComponentRoot = self.__SystemDefinitionBase
-				if os.environ.has_key('SOURCEROOT'):
-					self.__Logger.Info("Command line specified System Definition file base \'%s\' overriding environment SOURCEROOT \'%s\'", self.__SystemDefinitionBase, os.environ['SOURCEROOT'])
+				
+			if self.__SystemDefinitionBase and self.__SystemDefinitionBase != ".":
+				self.__ComponentRoot = self.__SystemDefinitionBase
+				if os.environ.has_key('SRCROOT'):
+					self.__Logger.Info("Command line specified System Definition file base \'%s\' overriding environment SRCROOT \'%s\'", self.__SystemDefinitionBase, os.environ['SRCROOT'])
+				elif os.environ.has_key('SOURCEROOT'):
+					self.__Logger.Info("Command line specified System Definition file base \'%s\' overriding environment SOURCEROOT \'%s\'", self.__SystemDefinitionBase, os.environ['SOURCEROOT'])
 		else:
 			self.__Logger.Error("Cannot process schema version %s of file %s", version.string, self.__SystemDefinitionFile)
 			return False
+
+		if self.__Version['MAJOR'] >= 3:
+			# id is the unique identifier for 3.0 and later schema
+			self.__IdAttribute = "id"
 
 		return True
 
 	def __Parse(self):
-		# find the <systemModel> element (there can be 0 or 1) and search any <layer> elements for <unit> elements with "bldFile" attributes
-		# the <layer> context of captured "bldFile" attributes is recorded as we go
+		# For 2.0 and earlier: find the <systemModel> element (there can be 0 or 1) and search any <layer> elements for <unit> elements with "bldFile" attributes
+		# the <layer> context of captured "bldFile" attributes is recorded as we go
+		# For 3.0 and later, process any architectural topmost element, use the topmost element with an id as the "layer"
 		for child in self.__SystemDefinitionElement.childNodes:
-			if child.localName == "systemModel":
+			if child.localName in ["systemModel", "layer", "package", "collection", "component"]:
 				self.__ProcessSystemModelElement(child)
 
 	def __CreateComponent(self, aBldInfFile, aUnitElement):
 		# take a resolved bld.inf file and associated <unit/> element and returns a populated Component object
 		containers = {}
-		self.__GetElementContainers(aUnitElement, containers)
-		component = SystemModelComponent(aBldInfFile, containers, self.__SystemDefinitionFile, self.__SystemDefinitionBase, self.__Version)
+		self.__GetElementContainers(aUnitElement, containers)
+		layer = self.__GetEffectiveLayer(aUnitElement)
+		component = SystemModelComponent(aBldInfFile, layer, containers, self.__SystemDefinitionFile, self.__SystemDefinitionBase, self.__Version)
 
 		return component
+
+	def __GetEffectiveLayer(self, aElement):
+		#' return the ID of the topmost item which has an ID. For 1.x and 2.x, this will always be layer, for 3.x, it will be the topmost ID'd element in the file
+		# never call this on the root element
+		if aElement.parentNode.hasAttribute(self.__IdAttribute):
+			return self.__GetEffectiveLayer(aElement.parentNode)
+		elif aElement.hasAttribute(self.__IdAttribute):
+			return aElement.getAttribute(self.__IdAttribute)
+		return ""
 
 	def __GetElementContainers(self, aElement, aContainers):
 		# take a <unit/> element and creates a type->name dictionary of all of its parent containers
 		# We're only interested in parent nodes if they're not the top-most node
 		if aElement.parentNode.parentNode:
 			parent = aElement.parentNode
-			name = parent.getAttribute("name")
+			name = parent.getAttribute(self.__IdAttribute)
 
 			if name:
 				aContainers[parent.tagName] = name
@@ -308,9 +333,10 @@
 	def __ProcessSystemModelElement(self, aElement):
 		"""Search for XML <unit/> elements with 'bldFile' attributes and resolve concrete bld.inf locations
 		with an appreciation of different schema versions."""
-
-		if aElement.tagName == "layer":
-			currentLayer = aElement.getAttribute("name")
+
+		# The effective "layer" is the item whose parent does not have an id (or name in 2.x and earlier)
+		if not aElement.parentNode.hasAttribute(self.__IdAttribute) :
+			currentLayer = aElement.getAttribute(self.__IdAttribute)
 
 			if not self.__LayerDetails.has_key(currentLayer):
 				self.__LayerDetails[currentLayer] = []
@@ -324,10 +350,10 @@
 			if bldFileValue:
 				bldInfRoot = self.__ComponentRoot
 
-				if self.__Version['MAJOR'] == 1 and self.__Version['MID'] == 4:
-					# version 1.4.x schema paths can use DOS slashes
+				if self.__Version['MAJOR'] == 1:
+					# version 1.x schema paths can use DOS slashes
 					bldFileValue = raptor_utilities.convertToUnixSlash(bldFileValue)
-				elif self.__Version['MAJOR'] == 2:
+				elif self.__Version['MAJOR'] >= 2:
 					# version 2.x.x schema paths are subject to a "root" attribute off-set, if it exists
 					rootValue = aElement.getAttribute("root")
 
@@ -342,8 +368,14 @@
 
 				group = generic_path.Path(bldFileValue)
 
-				if not group.isAbsolute() and bldInfRoot:
-					group = generic_path.Join(bldInfRoot, group)
+				if self.__Version['MAJOR'] < 3:
+					# absolute paths are not changed by root var in 1.x and 2.x
+					if not group.isAbsolute() and bldInfRoot:
+						group = generic_path.Join(bldInfRoot, group)
+				else:
+					# only absolute paths are changed by root var in 3.x
+					if group.isAbsolute() and bldInfRoot:
+						group = generic_path.Join(bldInfRoot, group)
 
 				bldinf = generic_path.Join(group, "bld.inf").FindCaseless()
 
@@ -351,7 +383,7 @@
 					self.__Logger.Error("No bld.inf found at %s in %s", group.GetLocalString(), self.__SystemDefinitionFile)
 				else:
 					component = self.__CreateComponent(bldinf, aElement)
-					layer = component.GetContainerName("layer")
+					layer = component.GetLayerName()
 					if layer:
 						self.__LayerDetails[layer].append(component)
 						self.__TotalComponents += 1
--- a/sbsv2/raptor/python/sbs_dist.py	Wed Apr 14 18:01:20 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,139 +0,0 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# raptor linux distribution creation module
-# This module allow to crate raptor linux distribution archive (tar.gz) e.g. sbs_linux_dist.tar.gz
-# Script extect the following command-line parameters:
-# 1. Archive name
-# 2. List of files/directories to include
-# By default windows specific and source files are excluded.
-# example including bin and python subdir:
-# sbs_dist.py sbs_linux_dist.tar.gz bin python
-#
-
-import os
-import re
-import tarfile
-import sys
-import dos2unix
-
-#------------------------------------------------------------------------------
-# Create tar.gz archive including given files (fileName list and tarinfo list)
-#------------------------------------------------------------------------------
-def createTarGZ(tarName, fileList):
-    tar = tarfile.open(tarName, "w|gz")
-    for name in fileList:
-        tar.add(name)
-    return tar
-
-#------------------------------------------------------------------------------
-# Lists files in each of given directories
-#------------------------------------------------------------------------------
-def listFilesInDirs(paths):
-    fileList = []
-    for path in paths:
-        fileList.extend(listFiles(path))
-    return fileList
-
-#------------------------------------------------------------------------------
-# Lists files in given directory
-#------------------------------------------------------------------------------
-def listFiles(path):
-    fileList = []
-    for root, dirs, files in os.walk(path):
-        for index in range(len(files)):
-            fileList.append(root + "/" + files[index])
-    return fileList
-
-#------------------------------------------------------------------------------
-# Excludes files matching "pattern" from given files list
-#------------------------------------------------------------------------------
-def excludeFiles(fileList, pattern):
-    filteredFileList = []
-    regExp = re.compile(pattern)
-    for fileName in fileList:
-        if not(regExp.match(fileName)):
-           filteredFileList.append(fileName)
-    return filteredFileList
-
-
-#------------------------------------------------------------------------------
-# Groups given paths as files or directories
-#------------------------------------------------------------------------------
-def groupFilesAndDirs(filesAndDirs):
-    files = []
-    dirs = []
-    for name in filesAndDirs:
-        if os.path.isdir(name):
-             dirs.append(name)
-        else:
-             if os.path.isfile(name):
-                files.append(name)
-             else:
-                  print "Warning: Neither a file nor a directory! Ignoring parameter - " + name
-    return (files,dirs)
-
-#------------------------------------------------------------------------------
-# Prepares regular expression to exclude unnecessary files
-#------------------------------------------------------------------------------
-def prepareExcludedFilesRegExp():
-    pathPrefixRegExp = ".*[\\\/]"
-    filesRegExp = "((sbs)|(.*\.bat)|(.*\.pyc)|(.*\.cmd)|(.*\.exe)|(.*\.dll)|(sbs_dist.py)"
-    filesRegExp = filesRegExp + "|(dos2unix.py)|(raptor_py2exe_setup.py)|(make)|(bash)|(bashbug))+"
-    return "^" + pathPrefixRegExp + filesRegExp + "$"
-
-#------------------------------------------------------------------------------
-# Includes all files in fileList in given tar with altered executable permision (+X) for all
-#------------------------------------------------------------------------------
-def includeAsExecutable(tar, fileList):
-    for f in fileList:
-        tarinfo = tar.gettarinfo(f)
-        # OR with 73 (001 001 001) - +X for all
-        tarinfo.mode = tarinfo.mode | 73
-        tar.addfile(tarinfo,file(f, "rb"))
-
-
-#------------------------------------------------------------------------------
-# Validate script parameters
-#------------------------------------------------------------------------------
-def validateParameters(tarFileName, filesToInclude):
-    if not(len(tarFileName) > 0):
-       print "Error: No archive name given."
-       sys.exit()
-    if not(len(filesToInclude) > 0):
-       print "Error: No files/directories names to include in archive given."
-       sys.exit()
-
-
-tarFileName = sys.argv[1]
-# files and directories
-filesAndDirsToInclude = sys.argv[2:]
-
-validateParameters(tarFileName, filesAndDirsToInclude)
-
-(filesToInclude,dirsToInclude) = groupFilesAndDirs(filesAndDirsToInclude)
-
-fileList = listFilesInDirs(dirsToInclude)
-fileList.extend(filesToInclude)
-
-filteredFileList = excludeFiles(fileList, prepareExcludedFilesRegExp())
-
-dos2unix.dos2unix("bin/sbs")
-
-tar = createTarGZ(tarFileName, filteredFileList)
-fileToBeExecutableList = ["bin/sbs", "linux-i386/bin/make", "linux-i386/bin/bash", "linux-i386/bin/bashbug",
-			  "bin/sbs_descramble"]
-includeAsExecutable(tar, fileToBeExecutableList)
-tar.close()
-
--- a/sbsv2/raptor/test/common/raptor_tests.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/common/raptor_tests.py	Fri Apr 16 19:32:39 2010 +0100
@@ -417,22 +417,26 @@
 
 			p = subprocess.Popen(args=[BASH, '-c', command], 
 					stdout=subprocess.PIPE,
-					stderr=subprocess.STDOUT,
+					stderr=subprocess.PIPE,
 					env=shellenv,
 					shell=False,
 					universal_newlines=True)
 
-			self.output = p.communicate()[0]
+			(std_out, std_err) = p.communicate()
+			
+			self.output = std_out + std_err
 		else:
 			p = subprocess.Popen(command, 
 					stdout=subprocess.PIPE,
-					stderr=subprocess.STDOUT,
+					stderr=subprocess.PIPE,
 					env=shellenv,
 					shell=True,
 					universal_newlines=True)
 
-			self.output = p.communicate()[0]
-
+			(std_out, std_err) = p.communicate()
+			
+			self.output = std_out + std_err
+			
 		if debug_mode_active:
 			print self.output
 
--- a/sbsv2/raptor/test/config/arm.xml	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/config/arm.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -9,7 +9,6 @@
   <var name="ARMV5_BASE">
     <env name='SBS_HOME' default='' type='path'/>
     <env name='EPOCROOT'/>
-    <env name='ARMROOT'/>
 
     <set name='FLMHOME' value='$(SBS_HOME)/lib/flm'/>
     <set name='TRADITIONAL_PLATFORM' value='ARMV5'/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/os_properties.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- This variant modifies the root variant for this particular kit. -->
+  <var name="root.changes">
+
+    <!-- pretend we don't have the new paging options (codepaging, datapaging)
+         so that we can test the old options (paged, unpaged)
+    --> 
+    <set name='POSTLINKER_SUPPORTS_WDP' value=''/>
+  </var>
+  
+</build>
--- a/sbsv2/raptor/test/run.bat	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/run.bat	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -14,29 +14,16 @@
 @rem Description: 
 @rem
 
-@echo off
-
-set HOSTPLATFORM=win 32
-set HOSTPLATFORM_DIR=win32
-
-setlocal
-set __PYTHON__=%SBS_PYTHON%
-if "%__PYTHON__%"=="" set __PYTHON__=%SBS_HOME%\win32\python264\python.exe
+@SETLOCAL
+@CALL %SBS_HOME%\bin\sbs_env.bat
 
-set __TEST_SUITE__=%SBS_HOME%\test\common\run_tests.pyc
-set __TEST_SUITE_PY__=%SBS_HOME%\test\common\run_tests.py
-
-@REM Mount '/' in cygwin, in case it is not done automatically
-set __CYGWIN__=%SBS_CYGWIN%
-if "%__CYGWIN__%"=="" set __CYGWIN__=%SBS_HOME%\win32\cygwin
-%__CYGWIN__%\bin\umount -u "/" >NUL  2>NUL
-%__CYGWIN__%\bin\mount -u "%__CYGWIN__%" "/"
+@SET __TEST_SUITE__=%~dp0common\run_tests.pyc
+@SET __TEST_SUITE_PY__=%~dp0common\run_tests.py
 
 @REM If the Python source exists, use it. Else use the byte-compiled Python code
-if exist %__TEST_SUITE_PY__% SET __TEST_SUITE__=%__TEST_SUITE_PY__%
+@IF EXIST %__TEST_SUITE_PY__% SET __TEST_SUITE__=%__TEST_SUITE_PY__%
 
 @REM Then run the test suite with all the arguments
-%__PYTHON__% -tt %__TEST_SUITE__% %*
+@%__PYTHON__% -tt %__TEST_SUITE__% %*
 
-endlocal
-@echo on
+@ENDLOCAL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/annofile2log.py	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "43563"
+	t.name = "annofile2log_canned"
+	t.description = "test workaround for log corruption from a make engine whose name begins with 'e'"
+	
+	t.usebash = True
+	t.errors = 0
+	t.returncode = 0
+	t.exceptions = 0
+	t.command = "cd smoke_suite/test_resources/annofile2log && ( diff -wB <(python testanno2log.py <(bzip2 -dc scrubbed_ncp_dfs_resource.anno.bz2)) <(bzip2 -dc scrubbed_ncp_dfs_resource.stdout.bz2))"
+	
+	t.mustmatch_multiline = [ 
+		"^ *.?"
+                ]
+
+
+	t.run()
+
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/cli_makevar_override.py	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+# Checks that functionality for overriding makefile varaibles at the command no longer works
+# The mechanism for dealing with this was removed as the fix for SF bug 2134
+# On the CLI, "something=something" is now treated as a target rather than a variable assignment
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.name = "cli_makevar_overide"
+	t.id = "0117"
+	t.description = "Attempt to override a makefile var at the command line."
+	t.usebash = True
+	
+	t.command = "sbs -b smoke_suite/test_resources/basics/helloworld/Bld.inf REALLYCLEAN -m ${SBSMAKEFILE} -f ${SBSLOGFILE} HOSTPLATFORM_DIR=unlikelydir"  
+	
+	t.mustmatch = ["sbs: warning: CLEAN, CLEANEXPORT and a REALLYCLEAN should not be combined with other targets as the result is unpredictable"]
+	
+	t.warnings = 1
+	t.run()
+	
+	return t
+	
\ No newline at end of file
--- a/sbsv2/raptor/test/smoke_suite/export.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/export.py	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -18,39 +18,49 @@
 import os
 
 def run():
-	result = SmokeTest.PASS
 	
 	# This .inf file is created for clean_simple_export and
 	# reallyclean_simple_export tests to use so that we can put the
 	# username into the output filenames - which helps a lot when
 	# several people run tests on the same computer (e.g. linux machines)
 	bld = open('smoke_suite/test_resources/simple_export/expbld.inf', 'w')
-	bld.write("PRJ_PLATFORMS\n"
-		"ARMV5 WINSCW\n\n"
+	user = os.environ['USER']
+	bld.write("""
+	
+PRJ_PLATFORMS
+ARMV5 WINSCW
 
-		"PRJ_MMPFILES\n"
-		"simple.mmp\n\n"
+PRJ_MMPFILES
+simple.mmp
 
-		"PRJ_EXPORTS\n"
-		"simple_exp1.h exported_1.h\n"
-		"simple_exp2.h exported_2.h\n"
-		"simple_exp3.h exported_3.h\n"
-		"executable_file executable_file\n"
-		'"file with a space.doc" "exportedfilewithspacesremoved.doc"\n'
-		'"file with a space.doc" "exported file with a space.doc"\n\n'
+PRJ_EXPORTS
+#if !defined( WINSCW )
+// Exports conditional on build configuration macros aren't actually supported,
+// but we confirm that we preprocess in the context of an armv5 build when both
+// winscw and armv5 configurations are (implicitly, as there's no "-c" argument)
+// used.  This is in order to work around assumptions currently made in the
+// source base.
+simple_exp1.h exported_1.h
+#endif
+simple_exp2.h exported_2.h
+simple_exp3.h exported_3.h
+executable_file executable_file
+"file with a space.doc" "exportedfilewithspacesremoved.doc"
+"file with a space.doc" "exported file with a space.doc"
 
-		"simple_exp1.h /tmp/"+os.environ['USER']+"/  //\n"
-		"simple_exp2.h \\tmp\\"+os.environ['USER']+"/  //\n"
-		"simple_exp3.h /tmp/"+os.environ['USER']+"/simple_exp3.h \n"
-		"simple_exp4.h //")
+simple_exp1.h /tmp/%s/  //
+simple_exp2.h \\tmp\\%s/  //
+simple_exp3.h /tmp/%s/simple_exp3.h 
+simple_exp4.h //
+
+""" % (user, user, user))
 	bld.close()
 
 
 	t = SmokeTest()
 	t.id = "0023a"
 	t.name = "export"
-	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf " \
-			+ "-c armv5 EXPORT"
+	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf export"
 	t.targets = [
 		"$(EPOCROOT)/epoc32/include/exported_1.h",
 		"$(EPOCROOT)/epoc32/include/exported_2.h",
@@ -64,29 +74,23 @@
 		"$(EPOCROOT)/epoc32/include/simple_exp4.h"
 		]
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-
+	
 
 	t = SmokeTest()
 	t.id = "0023a1"
 	t.name = "export"
 	t.usebash = True
 	t.command = "ls -l ${EPOCROOT}/epoc32/include/executable_file"
-	t.mustmatch = [ "^.rwxrwxr.x .*executable_file.*$" ]
+	t.mustmatch = [ "^.rwxrwxr.x[\.\+]? .*executable_file.*$" ]
 	t.targets = []
 	t.run("linux")
 	t.usebash = False
 
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-
 
 	# Testing if clean deletes any exports which it is not supposed to
 	t.id = "0023b"
 	t.name = "export_clean" 
-	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf " \
-			+ "-c armv5 clean"
+	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf clean"
 	t.mustmatch = []
 	t.targets = [
 		"$(EPOCROOT)/epoc32/include/exported_1.h",
@@ -100,15 +104,12 @@
 		"/tmp/$(USER)/simple_exp3.h"
 		]
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
 
 
 	t = AntiTargetSmokeTest()
 	t.id = "0023c"
 	t.name = "export_reallyclean" 
-	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf " \
-			+ "-c armv5 reallyclean"
+	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf reallyclean"
 	t.antitargets = [
 		'$(EPOCROOT)/epoc32/include/exported_1.h',
 		'$(EPOCROOT)/epoc32/include/exported_2.h',
@@ -122,15 +123,12 @@
 		'$(EPOCROOT)/epoc32/include/simple_exp4.h'
 	]
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
 
 	# Check that the --noexport feature really does prevent exports from happening
 	t = AntiTargetSmokeTest()
 	t.id = "0023d"
 	t.name = "export_noexport" 
-	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf " \
-			+ "-c armv5 --noexport -n"
+	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf --noexport -n"
 	t.antitargets = [
 		'$(EPOCROOT)/epoc32/include/exported_1.h',
 		'$(EPOCROOT)/epoc32/include/exported_2.h',
@@ -144,11 +142,8 @@
 		'$(EPOCROOT)/epoc32/include/simple_exp4.h'
 	]
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
 		
 	t.id = "23"
 	t.name = "export"
-	t.result = result
 	t.print_result()
 	return t
--- a/sbsv2/raptor/test/smoke_suite/featurevariants.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/featurevariants.py	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -14,89 +14,134 @@
 # Description: 
 #
 
-from raptor_tests import SmokeTest
+from raptor_tests import AntiTargetSmokeTest, ReplaceEnvs
 import os
 
 def run():
-	t = SmokeTest()
-	
-	# tests for building feature variants
-	t.id = "56"
-	t.name = "featurevariants"
+	t = AntiTargetSmokeTest()
 	t.usebash = True
-	t.command = "sbs -b smoke_suite/test_resources/bv/bld.inf -c armv5 " + \
-                "-c armv5.test_bv_1 -c armv5.test_bv_2 -c armv5.test_bv_3 " + \
-                "--configpath=test/smoke_suite/test_resources/bv -f-"
-	t.targets = [
-		# prebuilt files
+	
+	preBuiltTargets = [
 		"$(EPOCROOT)/epoc32/release/armv5/udeb/dummy.lib",
 		"$(EPOCROOT)/epoc32/release/armv5/urel/dummy.lib",
 		"$(EPOCROOT)/epoc32/release/armv5/udeb/debfake.lib",
-		"$(EPOCROOT)/epoc32/release/armv5/urel/relfake.lib",
-		
-		# built files
+		"$(EPOCROOT)/epoc32/release/armv5/urel/relfake.lib"
+		]
+	
+	invariantTargets = [
 		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_invariant.dll",
 		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_invariant.dll.map",
 		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_invariant.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_invariant.dll",
 		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_invariant.dll.map",
 		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_invariant.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_invariant.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_invariant{000a0000}.dso"
+		]
+	
+	variantTargetsDefaultTree = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_variant1.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_variant2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createexe_variant3.exe.sym",
 
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_variant1.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_variant2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createexe_variant3.exe.sym"
+		]
+	
+	variantTargetsProductTrees = [		
 		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll",
 		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll.vmap",
 		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant2.dll",
 		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createexe_variant3.exe.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createexe_variant3.exe.vmap",
 
 		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant1.dll",
 		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant1.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant1.dll.vmap",
 		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant2.dll",
 		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant2.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createexe_variant3.exe.sym",		
 		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createexe_variant3.exe.vmap",
 
 		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant1.dll",
 		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant1.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant1.dll.vmap",
 		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant2.dll",
 		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant2.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createexe_variant3.exe.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createexe_variant3.exe.vmap",
 		
 		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant1.dll",
 		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant1.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant1.dll.vmap",
 		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant2.dll",
 		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant2.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createexe_variant3.exe.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createexe_variant3.exe.vmap",
 
 		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant1.dll",
 		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant1.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant1.dll.vmap",
 		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant2.dll",
 		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant2.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createexe_variant3.exe.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createexe_variant3.exe.vmap",
 		
 		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant1.dll",
 		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant1.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant1.dll.vmap",
 		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant2.dll",
 		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant2.dll.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createexe_variant3.exe.sym",
 		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createexe_variant3.exe.vmap",
-
-		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_invariant.dso",
-		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_invariant{000a0000}.dso",
-		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant1.dso",
-		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant1{000a0000}.dso",
-		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant2.dso",
-		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant2{000a0000}.dso",
-
+		]
+	
+	variantTargetsGeneric = [
 		"$(EPOCROOT)/epoc32/data/z/resource/apps/dummy_var1.rsc",
 		"$(EPOCROOT)/epoc32/include/dummy_var1.rsg",
 		"$(EPOCROOT)/epoc32/data/z/resource/apps/dummy_var2.rsc",
@@ -104,9 +149,14 @@
 		"$(EPOCROOT)/epoc32/data/z/resource/apps/dummy_var3.rsc",
 		"$(EPOCROOT)/epoc32/include/dummy_var3.rsg",
 		"$(EPOCROOT)/epoc32/data/z/resource/apps/dummy_inv.rsc",
-		"$(EPOCROOT)/epoc32/include/dummy_inv.rsg"
+		"$(EPOCROOT)/epoc32/include/dummy_inv.rsg",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant1.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant1{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant2.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant2{000a0000}.dso"
 		]
-	t.addbuildtargets('smoke_suite/test_resources/bv/bld.inf', [
+	
+	invariantBuildTargets = [
 		"createstaticdll_invariant_dll/armv5/udeb/CreateStaticDLL_invariant.o",
 		"createstaticdll_invariant_dll/armv5/udeb/CreateStaticDLL_invariant.o.d",
 		"createstaticdll_invariant_dll/armv5/udeb/createstaticdll_invariant_udeb_objects.via",
@@ -119,15 +169,41 @@
 		"createstaticdll_invariant_dll/armv5/urel/createstaticdll_invariant{000a0000}.dso",
 		
 		"dummy_inv_dll/dummy_inv__resource_apps_sc.rpp",
-		"dummy_inv_dll/dummy_inv__resource_apps_sc.rpp.d",
-		"dummy_var1_dll/dummy_var1__resource_apps_sc.rpp",
-		"dummy_var1_dll/dummy_var1__resource_apps_sc.rpp.d",
-		"dummy_var2_dll/dummy_var2__resource_apps_sc.rpp",
-		"dummy_var2_dll/dummy_var2__resource_apps_sc.rpp.d",
-		"dummy_var3_exe/dummy_var3__resource_apps_sc.rpp",
-		"dummy_var3_exe/dummy_var3__resource_apps_sc.rpp.d",
+		"dummy_inv_dll/dummy_inv__resource_apps_sc.rpp.d"
+		]
+
+	variantBuildTargetsDefaultTree = [
+		"createstaticdll_variant1_dll/armv5/udeb/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5/udeb/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5/udeb/createstaticdll_variant1_udeb_objects.via",
+		"createstaticdll_variant1_dll/armv5/udeb/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5/udeb/createstaticdll_variant1{000a0000}.dso",
+		"createstaticdll_variant1_dll/armv5/urel/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5/urel/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5/urel/createstaticdll_variant1_urel_objects.via",
+		"createstaticdll_variant1_dll/armv5/urel/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5/urel/createstaticdll_variant1{000a0000}.dso",
 		
+		"createstaticdll_variant2_dll/armv5/udeb/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5/udeb/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5/udeb/createstaticdll_variant2_udeb_objects.via",
+		"createstaticdll_variant2_dll/armv5/udeb/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5/udeb/createstaticdll_variant2{000a0000}.dso",
+		"createstaticdll_variant2_dll/armv5/urel/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5/urel/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5/urel/createstaticdll_variant2_urel_objects.via",
+		"createstaticdll_variant2_dll/armv5/urel/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5/urel/createstaticdll_variant2{000a0000}.dso",
 		
+		"createexe_variant3_exe/armv5/udeb/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5/udeb/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5/udeb/createexe_variant3_udeb_objects.via",
+		"createexe_variant3_exe/armv5/urel/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5/urel/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5/urel/createexe_variant3_urel_objects.via"
+		]
+	
+	variantBuildTargetsProductTrees = [		
 		"createstaticdll_variant1_dll/armv5.one/udeb/CreateStaticDLL_variant1.o",
 		"createstaticdll_variant1_dll/armv5.one/udeb/CreateStaticDLL_variant1.o.d",
 		"createstaticdll_variant1_dll/armv5.one/udeb/createstaticdll_variant1_udeb_objects.via",
@@ -157,7 +233,6 @@
 		"createexe_variant3_exe/armv5.one/urel/CreateEXE_variant3.o.d",
 		"createexe_variant3_exe/armv5.one/urel/createexe_variant3_urel_objects.via",
 		
-		
 		"createstaticdll_variant1_dll/armv5.two/udeb/CreateStaticDLL_variant1.o",
 		"createstaticdll_variant1_dll/armv5.two/udeb/CreateStaticDLL_variant1.o.d",
 		"createstaticdll_variant1_dll/armv5.two/udeb/createstaticdll_variant1_udeb_objects.via",
@@ -187,7 +262,6 @@
 		"createexe_variant3_exe/armv5.two/urel/CreateEXE_variant3.o.d",
 		"createexe_variant3_exe/armv5.two/urel/createexe_variant3_urel_objects.via",
 		
-		
 		"createstaticdll_variant1_dll/armv5.three/udeb/CreateStaticDLL_variant1.o",
 		"createstaticdll_variant1_dll/armv5.three/udeb/CreateStaticDLL_variant1.o.d",
 		"createstaticdll_variant1_dll/armv5.three/udeb/createstaticdll_variant1_udeb_objects.via",
@@ -216,14 +290,59 @@
 		"createexe_variant3_exe/armv5.three/urel/CreateEXE_variant3.o",
 		"createexe_variant3_exe/armv5.three/urel/CreateEXE_variant3.o.d",
 		"createexe_variant3_exe/armv5.three/urel/createexe_variant3_urel_objects.via"
-	])
+		]
+	
+	variantBuildTargetsGeneric = [
+		"dummy_var1_dll/dummy_var1__resource_apps_sc.rpp",
+		"dummy_var1_dll/dummy_var1__resource_apps_sc.rpp.d",
+		"dummy_var2_dll/dummy_var2__resource_apps_sc.rpp",
+		"dummy_var2_dll/dummy_var2__resource_apps_sc.rpp.d",
+		"dummy_var3_exe/dummy_var3__resource_apps_sc.rpp",
+		"dummy_var3_exe/dummy_var3__resource_apps_sc.rpp.d"
+		]
+	
+	sbscommand = "sbs -b smoke_suite/test_resources/bv/bld.inf -c armv5 " + \
+				"-c armv5.test_bv_1 -c armv5.test_bv_2 -c armv5.test_bv_3 -f- " + \
+				"--configpath=test/smoke_suite/test_resources/bv/config/variants"
+	
+	t.id = "56a"
+	t.description = """Build variant and invariant components.
+		In this default mode of operation, all components build for the non-product armv5 config whereas
+		only variant components build for the armv5.* bv configs."""
+	t.name = "featurevariant_build"
+	t.command = sbscommand
+	t.targets = preBuiltTargets + invariantTargets + variantTargetsGeneric + variantTargetsDefaultTree + variantTargetsProductTrees							
+	t.addbuildtargets('smoke_suite/test_resources/bv/bld.inf',
+				invariantBuildTargets + variantBuildTargetsGeneric + variantBuildTargetsDefaultTree + variantBuildTargetsProductTrees	
+				)
 	# Test that static libs are linked from the invariant place.
 	t.mustmatch = [
 		"armlink.*epoc32/release/armv5/urel/bv_static_lib.lib",
 		"armlink.*epoc32/release/armv5/udeb/bv_static_lib.lib"
-	]
+		]
 	t.run()
 	
+	t.id = "56b"
+	t.description = """Build variant and invariant components using an os_properties.xml that sets FEATUREVARIANTSAFE=1.
+		With FEATUREVARIANTSAFE only invariant components build for the non-product armv5 config and
+		only variant components build for the armv5.* bv configs.""" 
+	t.name = "featurevariant_build_featurevariantsafe"
+	t.command = sbscommand + " --configpath=test/smoke_suite/test_resources/bv/config/properties"
+	t.targets = preBuiltTargets + invariantTargets + variantTargetsGeneric + variantTargetsProductTrees
+	t.addbuildtargets('smoke_suite/test_resources/bv/bld.inf',
+				invariantBuildTargets + variantBuildTargetsGeneric + variantBuildTargetsProductTrees	
+				)
+	t.antitargets = variantTargetsDefaultTree
+	t.addbuildantitargets('smoke_suite/test_resources/bv/bld.inf',
+				variantBuildTargetsDefaultTree
+				)
+	# Test that static libs are linked from the invariant place.
+	t.mustmatch = [
+		"armlink.*epoc32/release/armv5/urel/bv_static_lib.lib",
+		"armlink.*epoc32/release/armv5/udeb/bv_static_lib.lib"
+		]
+	t.run()
+
 	
 	# tests for the createvmap script
 	createvmap = "python $(SBS_HOME)/bin/createvmap.py"
@@ -247,7 +366,7 @@
 	srcWithout = " -s " + bvdata + "/without_macros.cpp"
 	badSrc = " -s " + bvdata + "/with_errors.cpp"
 
-	t.id = "56a"
+	t.id = "56c"
 	t.name = "createvmap exits with an error"
 	t.usebash = True
 	t.command = createvmap
@@ -257,7 +376,7 @@
 	t.run()
 
 	
-	t.id = "56b"
+	t.id = "56d"
 	t.name = "createvmap shows cpp errors"
 	t.usebash = True
 	t.command = createvmap + vmap + bvcpp + preinc + listA + badSrc
@@ -267,7 +386,7 @@
 	t.run()
 	
 	
-	t.id = "56c"
+	t.id = "56e"
 	t.name = "createvmap errors on missing feature list"
 	t.usebash = True
 	t.command = createvmap + vmap + bvcpp + preinc + listC + srcWith
@@ -277,7 +396,7 @@
 	t.run()
 	
 	
-	t.id = "56d"
+	t.id = "56f"
 	t.name = "createvmap warns on featureless code"
 	t.usebash = True
 	t.command = createvmap + vmap + bvcpp + preinc + listA + srcWithout
@@ -287,7 +406,7 @@
 	t.run()
 	
 	
-	t.id = "56e"
+	t.id = "56g"
 	t.name = "createvmap creates the right vmap file"
 	t.usebash = True
 	t.command = createvmap + vmap + bvcpp + preinc + listA + listB + srcWith + srcWithout + " && cat " + vmapfile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/keepgoing.py	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,106 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.description = """Raptor should keep going and build as much as possible with the -k option specified."""
+	
+	command = "sbs -b smoke_suite/test_resources/simple/bld.inf -k"
+	config = " --configpath=test/smoke_suite/test_resources/keepgoing"
+	targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.sym"
+		]	
+	buildtargets = [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/armv5/udeb/test.o.d",
+		"test_/armv5/udeb/test3.o.d",
+		"test_/armv5/udeb/test4.o.d",
+		"test_/armv5/udeb/test5.o.d",
+		"test_/armv5/udeb/test1.o.d",
+		"test_/armv5/udeb/test6.o.d",
+		"test_/armv5/udeb/test2.o.d",
+		"test_/armv5/udeb/test3.o",
+		"test_/armv5/udeb/test4.o",
+		"test_/armv5/udeb/test5.o",
+		"test_/armv5/udeb/test1.o",
+		"test_/armv5/udeb/test6.o",
+		"test_/armv5/udeb/test2.o",
+		"test_/armv5/urel/test.o.d",
+		"test_/armv5/urel/test3.o.d",
+		"test_/armv5/urel/test4.o.d",
+		"test_/armv5/urel/test5.o.d",
+		"test_/armv5/urel/test1.o.d",
+		"test_/armv5/urel/test6.o.d",
+		"test_/armv5/urel/test2.o.d",
+		"test_/armv5/urel/test3.o",
+		"test_/armv5/urel/test4.o",
+		"test_/armv5/urel/test5.o",
+		"test_/armv5/urel/test1.o",
+		"test_/armv5/urel/test6.o",
+		"test_/armv5/urel/test2.o",
+		"test_/armv5/udeb/test_udeb_objects.via",
+		"test_/armv5/urel/test_urel_objects.via"
+		]
+	
+	# using a non-existent config with -c should build any independent configs
+	t.id = "115a"
+	t.name = "keepgoing_bad_config"
+	t.command = command + " -c armv5 -c armv5.bogus"
+	t.targets = targets
+	t.addbuildtargets("smoke_suite/test_resources/simple/bld.inf", buildtargets)
+	t.mustmatch = ["sbs: error: Unknown build variant 'bogus'"]
+	t.warnings = 0
+	t.errors = 1
+	t.returncode = 1
+	t.run()
+	
+	# using groups with bad sub-groups should build any independent groups
+	t.id = "115b"
+	t.name = "keepgoing_bad_subgroup"
+	t.command = command + config + " -c lots_of_products"
+	t.mustmatch = ["Unknown reference 'qwertyuio'",
+	               "Unknown reference 'asdfghjkl'",
+	               "Unknown reference 'zxcvbnm_p'"]
+	t.warnings = 0
+	t.errors = 3
+	t.returncode = 1
+	t.run()
+	
+	# using groups with bad sub-sub-groups should build any independent groups
+	t.id = "115c"
+	t.name = "keepgoing_bad_subsubgroup"
+	t.command = command + config + " -c lots_of_products_2"
+	t.mustmatch = ["Unknown reference 'qwertyuio'",
+	               "Unknown reference 'asdfghjkl'",
+	               "Unknown reference 'zxcvbnm_p'"]
+	t.warnings = 0
+	t.errors = 3
+	t.returncode = 1
+	t.run()
+	
+	# summarise	
+	t.id = "115"
+	t.name = "keepgoing"
+	t.print_result()
+	return t
--- a/sbsv2/raptor/test/smoke_suite/mmp_keywords.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/mmp_keywords.py	Fri Apr 16 19:32:39 2010 +0100
@@ -288,6 +288,25 @@
 	t.returncode = 1
 	t.run()
 
+	# Test keyword: EPOCNESTEDEXCEPTIONS
+	t.id = "75n"
+	t.name = "epocnestedexceptions"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/epocnestedexceptions/bld.inf -c armv5 -f-"
+
+	# When EPOCNESTEDEXCEPTIONS is specified in the MMP file, a different static
+	# run-time library should be used.
+	t.mustmatch_singleline = ["usrt_nx_\d_\d\.lib"]
+	t.mustnotmatch = ["usrt._.."]
+
+	t.countmatch = []
+
+	# The new static run-time libraries don't yet exist.
+	t.errors = 1
+	t.warnings = 2
+	t.targets = []
+
+	t.run()
+
 	t.id = "75"
 	t.name = "mmp_keywords"
 	t.print_result()
--- a/sbsv2/raptor/test/smoke_suite/paging.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/paging.py	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -24,61 +24,108 @@
 	cmd_prefix = "sbs -b smoke_suite/test_resources/simple_paging/bld.inf -c armv5_urel "
 	cmd_suffix = " -m ${SBSMAKEFILE} -f ${SBSLOGFILE} && cat ${SBSLOGFILE} "
 
-	result = SmokeTest.PASS
-
 	t.id = "0093a"
 	t.name = "paging_default"
 	t.command = cmd_prefix + "-p default.mmp" + cmd_suffix
-	t.mustmatch = [".*--codepaging=default.*", ".*--datapaging=default.*"]
-	t.run("windows")	# Windows-only until we've updated the Linux version of elf2e32.
-	if t.result == "skip":
-		return t
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
+	t.mustmatch_singleline = [
+			"--codepaging=default", 
+			"--datapaging=default"
+			]
+	t.run()
 
 	t.id = "0093b"
 	t.name = "paging_unpaged"
 	t.command = cmd_prefix + "-p unpaged.mmp" + cmd_suffix
-	t.mustmatch = [".*--codepaging=unpaged.*", ".*--datapaging=unpaged.*"]
+	t.mustmatch_singleline = [
+			"--codepaging=unpaged", 
+			"--datapaging=unpaged"
+			]
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
 
 	t.id = "0093c"
 	t.name = "paging_paged"
 	t.command = cmd_prefix + "-p paged.mmp" + cmd_suffix
-	t.mustmatch = [".*--codepaging=paged.*", ".*--datapaging=paged.*"]
+	# Either pagedcode or pageddata can imply bytepaircompresstarget 
+	t.mustmatch_singleline = [
+			"--codepaging=paged", 
+			"--datapaging=default",
+			"--compressionmethod=bytepair"
+			]
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
 
 	t.id = "0093d"
 	t.name = "paging_unpagedcode_pageddata"
 	t.command = cmd_prefix + "-p unpagedcode_pageddata.mmp" + cmd_suffix
-	t.mustmatch = [".*--codepaging=unpaged.*", ".*--datapaging=paged.*"]
+	t.mustmatch_singleline = [
+			"--codepaging=unpaged", 
+			"--datapaging=paged",
+			"--compressionmethod=bytepair"
+			]
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
 
 	t.id = "0093e"
 	t.name = "paging_pagedcode_unpageddata"
 	t.command = cmd_prefix + "-p pagedcode_unpageddata.mmp" + cmd_suffix
-	t.mustmatch = [".*--codepaging=paged.*", ".*--datapaging=unpaged.*"]
+	t.mustmatch_singleline = [
+			"--codepaging=paged", 
+			"--datapaging=unpaged",
+			"--compressionmethod=bytepair"
+			]
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
 
 	t.id = "0093f"
 	t.name = "paging_pagedcode_defaultdata"
 	t.command = cmd_prefix + "-p pagedcode_defaultdata.mmp" + cmd_suffix
-	t.mustmatch = [".*--codepaging=paged.*", ".*--datapaging=default.*"]
+	t.mustmatch_singleline = [
+			"--codepaging=paged", 
+			"--datapaging=default",
+			"--compressionmethod=bytepair"
+			]
+	t.run()
+
+	t.id = "0093g"
+	t.name = "paging_paged_unpaged_no_bytepair"
+	t.command = cmd_prefix + "-p paged_unpaged.mmp" + cmd_suffix
+	t.mustmatch_singleline = [
+			"--codepaging=unpaged", 
+			"--datapaging=unpaged"
+			]
+	t.mustnotmatch = [
+			"--compressionmethod=bytepair"	
+			]
+	t.warnings = 2 # 1 in the log and 1 on screen
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
+
+	# test the pre-WDP paging options --paged and --unpaged
+	# there is an os_properties.xml file in test/config that
+	# turns POSTLINKER_SUPPORTS_WDP off
+	
+	t.id = "0093g"
+	t.name = "paging_paged_no_wdp"
+	t.command = cmd_prefix + "-p paged.mmp --configpath=test/config" + cmd_suffix
+	t.mustmatch_singleline = [
+			"--paged", 
+			"--compressionmethod=bytepair"
+			]
+	t.mustnotmatch = []
+	t.warnings = 0
+	t.targets = [ "$(EPOCROOT)/epoc32/release/armv5/urel/paged.dll" ]
+	t.run()
+	
+	t.id = "0093h"
+	t.name = "paging_unpaged_no_wdp"
+	t.command = cmd_prefix + "-p unpaged.mmp --configpath=test/config" + cmd_suffix
+	t.mustmatch_singleline = [
+			"--unpaged", 
+			]
+	t.mustnotmatch = [
+			"--compressionmethod=bytepair"	
+			]
+	t.targets = [ "$(EPOCROOT)/epoc32/release/armv5/urel/unpaged.dll" ]
+	t.run()
 
 	t.id = "0093"
 	t.name = "paging"
-	t.result = result
 	t.print_result()
 	return t
 
--- a/sbsv2/raptor/test/smoke_suite/parallel_parsing.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/parallel_parsing.py	Fri Apr 16 19:32:39 2010 +0100
@@ -54,7 +54,7 @@
 	warnings = 0
 		
 	t.id = "104"
-	t.name = "parallelparsing"
+	t.name = "parallel_parsing"
 	t.description = description
 	t.command = command 
 	t.targets = targets
--- a/sbsv2/raptor/test/smoke_suite/plugin_armv5_winscw_freeze.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/plugin_armv5_winscw_freeze.py	Fri Apr 16 19:32:39 2010 +0100
@@ -24,7 +24,8 @@
 		the correct FREEZE behaviour in each case.  The correct behaviour for a PLUGIN/PLUGIN3 is
 		indicative of all TARGETTYPEs where the build system defines known exports: FREEZE should do nothing
 		unless an explicit DEFFILE statement is present in the .mmp file.
-		Also confirms default UID2 settings for PLUGIN3 TARGETTYPEs."""
+		Also confirms default UID2 settings for PLUGIN3 TARGETTYPEs and default resource generation locations
+		for both PLUGIN and PLUGIN3."""
 	t.usebash = True
 	
 	t.command = """
@@ -34,7 +35,13 @@
 
 	t.targets = [
 		"smoke_suite/test_resources/simple_plugin/bwins/plugin2u.def",
-		"smoke_suite/test_resources/simple_plugin/eabi/plugin2u.def"		
+		"smoke_suite/test_resources/simple_plugin/eabi/plugin2u.def",
+		"$(EPOCROOT)/epoc32/data/z/resource/plugins/plugin.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/plugins/plugin.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/plugins/plugin.rsc",
+		"$(EPOCROOT)/epoc32/data/z/resource/plugins/plugin3.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/plugins/plugin3.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/plugins/plugin3.rsc"	
 		]
 	
 	t.antitargets = [
--- a/sbsv2/raptor/test/smoke_suite/resource.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/resource.py	Fri Apr 16 19:32:39 2010 +0100
@@ -63,5 +63,7 @@
 		"helloworld_reg_exe/helloworld_reg__private_10003a3f_apps_sc.rpp",
 		"helloworld_reg_exe/helloworld_reg__private_10003a3f_apps_sc.rpp.d"])
 
+	t.mustnotmatch = ["HelloWorld.rss.* warning: trigraph"]
+	
 	t.run()
 	return t
--- a/sbsv2/raptor/test/smoke_suite/terminal_filter_tests.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/terminal_filter_tests.py	Fri Apr 16 19:32:39 2010 +0100
@@ -19,10 +19,10 @@
 def run():
 
 	t = SmokeTest()
-	t.id = "87"
-	t.name = "terminal_filter_tests"
-	t.description = "terminal_filter_tests: Tests the terminal filter against" \
-			+ " log files to ensure it 'does the right thing'"
+	t.description = "Tests against log files to ensure it 'does the right thing'"
+	
+	t.id = "87a"
+	t.name = "terminal_filter_tests_log"
 	t.command = "$(SBS_HOME)/test/smoke_suite/test_resources/refilter/testfilterterminal"
 	t.countmatch = [
 		# One of each type of error occurs early in the 'sbs' call where there
@@ -36,4 +36,19 @@
 	]
 	t.errors = 4
 	t.run()
+	
+	t.id = "87b"
+	t.name = "terminal_filter_tests_configs"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf"
+	t.countmatch = []
+	t.errors = 0
+	t.mustmatch_singleline = ["built 'armv5_urel'",
+							  "built 'armv5_udeb'",
+							  "built 'winscw_urel'",
+							  "built 'winscw_udeb'" ]
+	t.run()
+	
+	t.id = "87"
+	t.name = "terminal_filter_tests"
+	t.print_result()
 	return t
Binary file sbsv2/raptor/test/smoke_suite/test_resources/annofile2log/scrubbed_ncp_dfs_resource.anno.bz2 has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/annofile2log/scrubbed_ncp_dfs_resource.stdout.bz2 has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/annofile2log/testanno2log.py	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Component description file
+#
+
+
+import sys
+import os
+sys.path.append(os.path.join(os.environ['SBS_HOME'],"python"))
+
+from raptor_make import XMLEscapeLog
+from raptor_make import AnnoFileParseOutput
+
+
+retcode=0
+
+
+annofile = sys.argv[1]
+
+sys.stdout.write("<build>\n")
+try:
+	for l in XMLEscapeLog(AnnoFileParseOutput(annofile)):
+		sys.stdout.write(l)
+
+except Exception,e:
+	sys.stderr.write("error: " + str(e) + "\n")
+	retcode = 1
+sys.stdout.write("</build>\n")
+
+sys.exit(retcode)
--- a/sbsv2/raptor/test/smoke_suite/test_resources/bv/bv_test.xml	Wed Apr 14 18:01:20 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-	<build xmlns="http://symbian.com/xml/build"
-			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-			xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
-
-		<!-- test feature variants -->
-		<var name="test_bv_1">
-			<set name='FEATUREVARIANTNAME' value='.one' />
-			<set name='FEATURELISTFILES'
-					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/listA.txt
-					$(SBS_HOME)/test/smoke_suite/test_resources/bv/listB.txt' />
-			<set name='VARIANT_HRH'
-					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh/var1.hrh' />
-			<set name='SYSTEMINCLUDE'
-					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/var1
-					$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh' />   
-  		</var>
-		<var name="test_bv_2">
-			<set name='FEATUREVARIANTNAME' value='.two' />
-			<set name='FEATURELISTFILES'
-					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/listA.txt
-					$(SBS_HOME)/test/smoke_suite/test_resources/bv/listB.txt' />
-			<set name='VARIANT_HRH'
-					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh/var2.hrh' />
-			<set name='SYSTEMINCLUDE'
-					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/var2
-					$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh' />
-		</var>
-		<var name="test_bv_3">
-			<set name='FEATUREVARIANTNAME' value='.three' />
-			<set name='FEATURELISTFILES'
-					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/listA.txt
-					$(SBS_HOME)/test/smoke_suite/test_resources/bv/listB.txt' />
-			<set name='VARIANT_HRH'
-					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh/var3.hrh' />
-			<set name='SYSTEMINCLUDE'
-					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/var3
-					$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh' />
-		</var>
-	</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/config/properties/os_properties.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+        
+  <!-- Modify the root variant to turn on safe generation of Feature Variant binaries -->
+  <var name="root.changes">
+    <set name='FEATUREVARIANTSAFE' value='1'/>
+  </var>
+  
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/config/variants/bv_test.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+	<build xmlns="http://symbian.com/xml/build"
+			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+			xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+		<!-- test feature variants -->
+		<var name="test_bv_1">
+			<set name='FEATUREVARIANTNAME' value='.one' />
+			<set name='FEATURELISTFILES'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/listA.txt
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/listB.txt' />
+			<set name='VARIANT_HRH'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh/var1.hrh' />
+			<set name='SYSTEMINCLUDE'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/var1
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh' />   
+  		</var>
+		<var name="test_bv_2">
+			<set name='FEATUREVARIANTNAME' value='.two' />
+			<set name='FEATURELISTFILES'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/listA.txt
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/listB.txt' />
+			<set name='VARIANT_HRH'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh/var2.hrh' />
+			<set name='SYSTEMINCLUDE'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/var2
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh' />
+		</var>
+		<var name="test_bv_3">
+			<set name='FEATUREVARIANTNAME' value='.three' />
+			<set name='FEATURELISTFILES'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/listA.txt
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/listB.txt' />
+			<set name='VARIANT_HRH'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh/var3.hrh' />
+			<set name='SYSTEMINCLUDE'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/var3
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh' />
+		</var>
+	</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/keepgoing/groups.xml	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- This group deliberately contains some non-existent products 
+  -->
+  <group name="lots_of_products">
+	<groupRef ref='armv5'/>
+	<groupRef ref='armv5' mod="qwertyuio"/>
+	<groupRef ref='armv5' mod="asdfghjkl"/>
+	<groupRef ref='armv5' mod="zxcvbnm_p"/>
+  </group>
+  
+  <!-- This group just contains the one above to check multiple levels
+  -->
+  <group name="lots_of_products_2">
+    <groupRef ref="lots_of_products"/>
+  </group>
+  
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/epocnestedexceptions/bld.inf	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,3 @@
+PRJ_MMPFILES
+test.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/epocnestedexceptions/test.cpp	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,7 @@
+#include <e32def.h>
+
+TInt E32Main()
+{
+	return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/epocnestedexceptions/test.mmp	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,11 @@
+TARGET			test_mmp_epocnestedexceptions.exe
+TARGETTYPE		EXE
+
+LIBRARY			euser.lib
+
+SYSTEMINCLUDE   /epoc32/include
+
+SOURCE			test.cpp
+
+EPOCNESTEDEXCEPTIONS
+
--- a/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.rss	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.rss	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -66,6 +66,7 @@
 RESOURCE TBUF r_example_text_Item0 { buf="Item 0"; }
 RESOURCE TBUF r_example_text_Item1 { buf="Item 1"; }
 RESOURCE TBUF r_example_text_Item2 { buf="Item 2"; }
+RESOURCE TBUF r_example_text_Item3 { buf="This string generates a trigraph warning if not suppressed: <h>ID3?????????<m>"; }
 
 RESOURCE LOCALISABLE_APP_INFO r_lai
 	{
--- a/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/bld.inf	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/bld.inf	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -18,14 +18,17 @@
 
 PRJ_PLATFORMS
 
-    ARMV5
+ARMV5
 
 PRJ_MMPFILES
 
-    default.mmp
-    unpaged.mmp
-    paged.mmp
+default.mmp
+unpaged.mmp
+paged.mmp
 
-    unpagedcode_pageddata.mmp
-    pagedcode_unpageddata.mmp
-    pagedcode_defaultdata.mmp
+unpagedcode_pageddata.mmp
+pagedcode_unpageddata.mmp
+pagedcode_defaultdata.mmp
+
+paged_unpaged.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/paged_unpaged.mmp	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* In this example "bytepaircompresstarget" should not by implied as 
+* keyword "unpaged" cancels "paged". 
+*/
+
+
+TARGET          paged_unpaged.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+PAGED
+UNPAGED
+
--- a/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.mmp	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.mmp	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -26,5 +26,9 @@
 SOURCEPATH		.
 SOURCE			plugin.cpp
 SYSTEMINCLUDE 	/epoc32/include
-SYSTEMINCLUDE 	/epoc32/include/ecom 
+SYSTEMINCLUDE 	/epoc32/include/ecom
+SYSTEMINCLUDE	/epoc32/include/techview
 LIBRARY			euser.lib apmime.lib efsrv.lib
+
+START RESOURCE	plugin.rss
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.rss	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Dummy ECOM resource file
+*
+*/
+
+NAME PLUG
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_example_text_plug { buf="plug"; }
--- a/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin3.mmp	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin3.mmp	Fri Apr 16 19:32:39 2010 +0100
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description: 
-* Example ECOMP plugin3 component, with no UID listed
+* Example ECOM plugin3 component, with no UID listed
 *
 */
 
@@ -24,6 +24,10 @@
 VENDORID		0x70000001
 SOURCEPATH		.
 SOURCE			plugin.cpp
-SYSTEMINCLUDE 	/epoc32/include
-SYSTEMINCLUDE 	/epoc32/include/ecom 
+SYSTEMINCLUDE	/epoc32/include
+SYSTEMINCLUDE	/epoc32/include/ecom
+SYSTEMINCLUDE	/epoc32/include/techview
 LIBRARY			euser.lib apmime.lib efsrv.lib
+
+START RESOURCE	plugin3.rss
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin3.rss	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Dummy ECOM resource file
+*
+*/
+
+NAME PLG3
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_example_text_plug3 { buf="plug3"; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/BLD.INF	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Cross compilation of win32 tools on Linux 
+* 
+*/
+
+PRJ_PLATFORMS
+TOOLS2
+
+PRJ_MMPFILES
+PDRTRAN.MMP
+platmacros.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/PDRTRAN.MMP	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* pdrtran.exe for windows and pdrtran for linux
+*/
+
+TARGET			pdrtran
+TARGETTYPE		exe
+
+SOURCEPATH		./src
+SOURCE			LEXICAL.CPP PDRREADR.CPP PDRRECRD.CPP PDRTRAN.CPP
+SOURCE			READER.CPP RECORD.CPP STRNG.CPP
+
+SYSTEMINCLUDE		/epoc32/include 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/TEST.PD	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,594 @@
+! PCL5.PD
+! Printer driver file for HP laser printers
+
+Resources Pcl5Resources
+    Reset               "<27>E"
+    SetPageSize            "<27>&l%dA"
+!<27>&l
+! 0o - Portrait
+! 0e - top margin to zero
+! 0C - VMI to zero
+!<27>9 - clear horizontal margins
+!<27>(0N - ISO 8859-1 Latin 1 character set
+    PreAmble            "<27>&l0o0e0C<27>9<27>(0N"
+    PostAmble           "<27>E"
+    BoldOn              "<27>(s3B"
+    BoldOff             "<27>(s0B"
+    ItalicOn            "<27>(s1S"
+    ItalicOff           "<27>(s0S"
+    UnderlineOn         "<27>&d0D"
+    UnderlineOff        "<27>&d@"
+    NewPage             "<12>"
+    Portrait            "<27>&l0o0E<27>9"
+    Landscape           "<27>&l1o0E<27>9"
+    SetXPos             "<27>*p%dX"
+    SetYPos             "<27>*p%dY"
+    BitmapStart         "<27>*t300R<27>*r%df1A"  ! resolution 300 dots per inch
+    ScanLine            "<27>*b%dm%dW"			  ! compression method coded in first %d
+    BitmapEnd           "<27>*rC"
+EndResources
+
+Translates Telephone
+    5:35  ! must ensure width of 5 = width of 35
+    156:"<27>R<3><35><27>R<0>"
+EndTranslates
+
+FontInfo Courier10 
+    MaxNormalCharWidth 25
+    Ascent 33	  ! improvised values throughout
+    CodeSection 0:255
+        0:25
+    EndCodeSection
+EndFontInfo
+
+FontInfo Courier12 
+    MaxNormalCharWidth 30
+    Ascent 40
+    CodeSection 0:255
+        0:30
+    EndCodeSection
+EndFontInfo
+
+FontInfo LinePrinter9 
+    MaxNormalCharWidth 18
+    Ascent 28
+    CodeSection 0:255
+        0:18
+    EndCodeSection
+EndFontInfo
+
+FontInfo CgTimesStd
+    MaxNormalCharWidth 188
+    Ascent 167
+    CodeSection 0:255
+      0:207   1:207    2:207    3:207    4:207
+      5:104  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:61   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:61   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:108   20:104   21:104   22:207   23:150   24:150
+     25:150   26:150   27:150   28:184   29:150   30:150   31:150   32:61
+     33:69    34:96    35:104   36:104   37:184   38:161   39:69    40:69
+     41:69    42:104   43:184   44:69    45:69    46:69    47:69    48:104
+     49:104   50:104   51:104   52:104   53:104   54:104   55:104   56:104
+     57:104   58:69    59:69    60:207   61:184   62:207   63:92    64:184
+!    A        B        C        D        E        F        G        H
+     65:150   66:131   67:142   68:154   69:131   70:123   71:150   72:154
+!    I        J        K        L        M        N        O        P
+     73:69    74:81    75:146   76:131   77:188   78:154   79:150   80:119
+!    Q        R        S        T        U        V        W        X
+     81:150   82:138   83:111   84:131   85:154   86:150   87:196   88:150
+!    Y        Z
+     89:150   90:134   91:69    92:69    93:69    94:104   95:104   96:104
+!    a        b        c        d        e        f        g        h
+     97:92    98:104   99:92   100:104   101:92   102:69  103:104  104:104
+!    i        j        k        l        m        n        o        p
+    105:58   106:58   107:104  108:58   109:161  110:104  111:104  112:104
+!    q        r        s        t        u        v        w        x
+    113:104  114:77   115:81   116:58   117:104  118:104  119:150  120:104
+!    y        z
+    121:104  122:92   123:92   124:104  125:92   126:104  127:207  128:142
+    129:104  130:92   131:92   132:92   133:92   134:92   135:92   136:92
+    137:92   138:92   139:58   140:58   141:58   142:150  143:150  144:131
+    145:138  146:184  147:104  148:104  149:104  150:104  151:104  152:104
+    153:150  154:154  155:104  156:104  157:154  158:182  159:104  160:92
+    161:58   162:104  163:104  164:104  165:154  166:104  167:104  168:92
+    169:104  170:184  171:184  172:184  173:69   174:85   175:85   176:207
+    177:207  178:207  179:207  180:207  181:150  182:150  183:150  184:105
+    185:207  186:207  187:207  188:207  189:105  190:104  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:92   199:150  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:104  208:104
+    209:154  210:129  211:129  212:129  213:58   214:70   215:70   216:70
+    217:207  218:207  219:207  220:207  221:104  222:70   223:207  224:152
+    225:104  226:152  227:152  228:104  229:152  230:115  231:106  232:122
+    233:154  234:154  235:154  236:104  237:150  238:105  239:104  240:72
+    241:184  242:104  243:183  244:104  245:104  246:184  247:104  248:104
+    249:104  250:1    251:73   252:73   253:73   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo CgTimesItalic
+    MaxNormalCharWidth 170
+    Ascent 167
+    CodeSection 0:255
+      0:207
+      1:207    2:207    3:207    4:207
+      5:104  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:61   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:61   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:103   20:104   21:104   22:207   23:150   24:150
+     25:150   26:150   27:150   28:184   29:150   30:150   31:150   32:61
+     33:69    34:100   35:104   36:104   37:184   38:161   39:69    40:69
+     41:69    42:104   43:184   44:69    45:69    46:69    47:69    48:104
+     49:104   50:104   51:104   52:104   53:104   54:104   55:104   56:104
+     57:104   58:69    59:69    60:207   61:184   62:207   63:104   64:184
+     65:127   66:127   67:138   68:150   69:127   70:119   71:150   72:150
+     73:69    74:92    75:138   76:115   77:170   78:138   79:150   80:127
+     81:150   82:127   83:104   84:115   85:150   86:127   87:170   88:127
+     89:115   90:115   91:69    92:69    93:69    94:104   95:104   96:104
+     97:104   98:104   99:92   100:104  101:92   102:58   103:104  104:104
+    105:58   106:58   107:92   108:58   109:150  110:104  111:104  112:104
+    113:104  114:81   115:81   116:58   117:104  118:92   119:138  120:92
+    121:92   122:81   123:92   124:104  125:92   126:104  127:207  128:138
+    129:104  130:92   131:104  132:104  133:104  134:104  135:92   136:92
+    137:92   138:92   139:58   140:58   141:58   142:127  143:127  144:127
+    145:138  146:184  147:104  148:104  149:104  150:104  151:104  152:92
+    153:150  154:150  155:104  156:104  157:151  158:183  159:104  160:104
+    161:58   162:104  163:104  164:104  165:138  166:104  167:104  168:104
+    169:104  170:184  171:184  172:184  173:69   174:96   175:96   176:207
+    177:207  178:207  179:207  180:207  181:127  182:127  183:127  184:105
+    185:207  186:207  187:207  188:207  189:105  190:105  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:104  199:127  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:104  208:104
+    209:148  210:127  211:127  212:127  213:58   214:70   215:70   216:70
+    217:207  218:207  219:207  220:207  221:104  222:70   223:207  224:152
+    225:104  226:152  227:152  228:104  229:152  230:115  231:106  232:126
+    233:150  234:150  235:150  236:92   237:115  238:105  239:104  240:72
+    241:184  242:104  243:182  244:104  245:104  246:184  247:104  248:104
+    249:104  250:2    251:73   252:73   253:73   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo CgTimesBold
+    MaxNormalCharWidth 196
+    Ascent 167
+    CodeSection 0:255
+      0:207
+      1:207    2:207    3:207    4:207
+      5:104  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:61   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:61   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:119   20:104   21:104   22:207   23:150   24:150
+     25:150   26:150   27:150   28:184   29:150   30:150   31:150   32:61
+     33:69    34:96    35:104   36:104   37:184   38:169   39:69    40:69
+     41:69    42:104   43:184   44:69    45:69    46:69    47:69    48:104
+     49:104   50:104   51:104   52:104   53:104   54:104   55:104   56:104
+     57:104   58:69    59:69    60:207   61:184   62:207   63:104   64:184
+     65:150   66:138   67:150   68:150   69:138   70:127   71:161   72:161
+     73:81    74:100   75:161   76:138   77:196   78:150   79:161   80:127
+     81:161   82:150   83:115   84:138   85:150   86:150   87:207   88:150
+     89:150   90:138   91:69    92:69    93:69    94:104   95:104   96:104
+     97:104   98:115   99:92   100:115  101:92   102:73   103:104  104:115
+    105:58   106:69   107:115  108:58   109:171  110:115  111:104  112:115
+    113:115  114:92   115:81   116:69   117:115  118:104  119:150  120:104
+    121:104  122:92   123:104  124:104  125:104  126:104  127:207  128:150
+    129:115  130:92   131:104  132:104  133:104  134:104  135:92   136:92
+    137:92   138:92   139:58   140:58   141:58   142:150  143:150  144:138
+    145:150  146:215  147:104  148:104  149:104  150:115  151:115  152:104
+    153:161  154:150  155:104  156:104  157:163  158:182  159:104  160:104
+    161:58   162:104  163:115  164:115  165:150  166:104  167:104  168:104
+    169:104  170:184  171:184  172:184  173:69   174:88   175:88   176:207
+    177:207  178:207  179:207  180:207  181:150  182:150  183:150  184:105
+    185:207  186:207  187:207  188:207  189:105  190:104  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:104  199:150  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:104  208:104
+    209:148  210:137  211:137  212:137  213:58   214:80   215:80   216:80
+    217:207  218:207  219:207  220:207  221:104  222:80   223:207  224:162
+    225:115  226:162  227:162  228:104  229:162  230:115  231:116  232:126
+    233:150  234:150  235:150  236:104  237:150  238:105  239:104  240:72
+    241:184  242:104  243:183  244:104  245:104  246:184  247:104  248:104
+    249:104  250:23   251:73   252:73   253:73   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo CgTimesBoldItalic
+    MaxNormalCharWidth 184
+    Ascent 167
+    CodeSection 0:255
+      0:207
+      1:207    2:207    3:207    4:207
+      5:104  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:61   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:61   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:131   20:104   21:104   22:207   23:150   24:150
+     25:150   26:150   27:150   28:184   29:150   30:150   31:150   32:61
+     33:81    34:108   35:104   36:104   37:184   38:161   39:69    40:69
+     41:69    42:104   43:184   44:69    45:69    46:69    47:69    48:104
+     49:104   50:104   51:104   52:104   53:104   54:104   55:104   56:104
+     57:104   58:69    59:69    60:207   61:184   62:207   63:104   64:184
+     65:138   66:138   67:138   68:150   69:138   70:127   71:150   72:161
+     73:81    74:104   75:138   76:127   77:184   78:150   79:150   80:127
+     81:146   82:138   83:115   84:127   85:150   86:138   87:184   88:138
+     89:127   90:127   91:69    92:69    93:69    94:104   95:104   96:104
+     97:104   98:104   99:92   100:104  101:92   102:73   103:104  104:115
+    105:58   106:58   107:104  108:58   109:161  110:115  111:104  112:104
+    113:104  114:81   115:81   116:58   117:115  118:92   119:138  120:104
+    121:92   122:81   123:104  124:104  125:104  126:104  127:207  128:138
+    129:115  130:92   131:104  132:104  133:104  134:104  135:92   136:92
+    137:92   138:92   139:58   140:58   141:58   142:138  143:138  144:138
+    145:146  146:192  147:104  148:104  149:104  150:115  151:115  152:92
+    153:150  154:150  155:104  156:104  157:151  158:184  159:104  160:104
+    161:58   162:104  163:115  164:115  165:150  166:104  167:104  168:104
+    169:104  170:184  171:184  172:184  173:81   174:92   175:92   176:207
+    177:207  178:207  179:207  180:207  181:138  182:138  183:138  184:105
+    185:207  186:207  187:207  188:207  189:105  190:105  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:104  199:138  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:104  208:104
+    209:148  210:137  211:137  212:137  213:58   214:80   215:80   216:80
+    217:207  218:207  219:207  220:207  221:104  222:80   223:207  224:152
+    225:104  226:152  227:152  228:104  229:152  230:115  231:106  232:126
+    233:150  234:150  235:150  236:90   237:127  238:105  239:104  240:72
+    241:184  242:104  243:183  244:104  245:104  246:184  247:104  248:104
+    249:104  250:18   251:69   252:69   253:69   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo UniversStd
+    MaxNormalCharWidth 188
+    Ascent 167
+    CodeSection 0:255
+      0:207   1:207    2:207    3:207    4:207
+      5:131  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:69   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:69   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:110   20:131   21:131   22:207   23:150   24:150
+     25:150   26:150   27:150   28:207   29:150   30:150   31:150   32:69
+     33:69    34:104   35:131   36:131   37:207   38:158   39:69    40:69
+     41:69    42:131   43:207   44:69    45:69    46:69    47:69    48:131
+     49:131   50:131   51:131   52:131   53:131   54:131   55:131   56:131
+     57:131   58:69    59:69    60:207   61:207   62:207   63:108   64:207
+     65:154   66:131   67:146   68:150   69:119   70:115   71:154   72:150
+     73:58    74:115   75:138   76:111   77:188   78:150   79:158   80:123
+     81:161   82:134   83:134   84:131   85:150   86:150   87:207   88:150
+     89:142   90:127   91:69    92:69    93:69    94:131   95:104   96:131
+     97:111   98:119   99:111  100:119  101:111  102:77   103:119  104:119
+    105:50   106:50   107:111  108:50   109:181  110:119  111:119  112:119
+    113:119  114:73   115:104  116:77   117:119  118:115  119:181  120:115
+    121:115  122:100  123:92   124:104  125:92   126:131  127:207  128:146
+    129:119  130:111  131:111  132:111  133:111  134:111  135:111  136:111
+    137:111  138:111  139:50   140:50   141:50   142:154  143:154  144:119
+    145:177  146:204  147:119  148:119  149:119  150:119  151:119  152:115
+    153:158  154:150  155:122  156:131  157:160  158:207  159:131  160:111
+    161:50   162:119  163:119  164:119  165:150  166:85   167:85   168:108
+    169:104  170:207  171:207  172:207  173:69   174:115  175:115  176:207
+    177:207  178:207  179:207  180:207  181:154  182:154  183:154  184:105
+    185:207  186:207  187:207  188:207  189:129  190:129  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:114  199:154  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:128  208:121
+    209:150  210:119  211:119  212:119  213:51   214:58   215:58   216:58
+    217:207  218:207  219:207  220:207  221:105  222:58   223:207  224:158
+    225:127  226:158  227:158  228:119  229:158  230:115  231:119  232:126
+    233:150  234:150  235:150  236:118  237:141  238:129  239:129  240:72
+    241:207  242:106  243:207  244:130  245:130  246:207  247:129  248:131
+    249:129  250:25   251:81   252:81   253:81   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo UniversItalic
+    MaxNormalCharWidth 188
+    Ascent 167
+    CodeSection 0:255
+      0:207
+      1:207    2:207    3:207    4:207
+      5:131  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:69   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:69   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:114   20:131   21:131   22:207   23:150   24:150
+     25:150   26:150   27:150   28:207   29:150   30:150   31:150   32:69
+     33:69    34:104   35:131   36:131   37:207   38:158   39:69    40:69
+     41:69    42:131   43:207   44:69    45:69    46:69    47:69    48:131
+     49:131   50:131   51:131   52:131   53:131   54:131   55:131   56:131
+     57:131   58:69    59:69    60:207   61:207   62:207   63:108   64:207
+     65:154   66:131   67:146   68:150   69:119   70:115   71:154   72:150
+     73:58    74:115   75:138   76:111   77:188   78:150   79:158   80:123
+     81:161   82:134   83:134   84:131   85:150   86:150   87:207   88:150
+     89:142   90:127   91:69    92:69    93:69    94:131   95:104   96:131
+     97:111   98:119   99:111  100:119  101:111  102:77   103:119  104:119
+    105:50   106:50   107:111  108:50   109:181  110:119  111:119  112:119
+    113:119  114:73   115:104  116:77   117:119  118:115  119:181  120:115
+    121:115  122:100  123:92   124:104  125:92   126:131  127:207  128:146
+    129:119  130:111  131:111  132:111  133:111  134:111  135:111  136:111
+    137:111  138:111  139:50   140:50   141:50   142:154  143:154  144:119
+    145:177  146:204  147:119  148:119  149:119  150:119  151:119  152:115
+    153:158  154:150  155:122  156:131  157:160  158:207  159:131  160:111
+    161:50   162:119  163:119  164:119  165:150  166:85   167:85   168:108
+    169:104  170:207  171:207  172:207  173:69   174:115  175:115  176:207
+    177:207  178:207  179:207  180:207  181:154  182:154  183:154  184:105
+    185:207  186:207  187:207  188:207  189:129  190:129  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:111  199:154  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:128  208:121
+    209:150  210:119  211:119  212:119  213:51   214:58   215:58   216:58
+    217:207  218:207  219:207  220:207  221:105  222:58   223:207  224:158
+    225:127  226:158  227:158  228:119  229:158  230:115  231:119  232:126
+    233:150  234:150  235:150  236:115  237:142  238:129  239:129  240:72
+    241:207  242:106  243:207  244:130  245:130  246:207  247:129  248:131
+    249:129  250:16   251:81   252:81   253:81   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo UniversBold
+    MaxNormalCharWidth 188
+    Ascent 167
+    CodeSection 0:255
+      0:207
+      1:207    2:207    3:207    4:207
+      5:131  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:69   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:69   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:115   20:131   21:131   22:207   23:150   24:150
+     25:150   26:150   27:150   28:207   29:150   30:150   31:150   32:69
+     33:69    34:108   35:131   36:131   37:207   38:158   39:69    40:69
+     41:69    42:131   43:207   44:69    45:69    46:69    47:69    48:131
+     49:131   50:131   51:131   52:131   53:131   54:131   55:131   56:131
+     57:131   58:69    59:69    60:207   61:207   62:207   63:108   64:207
+     65:154   66:131   67:146   68:150   69:119   70:115   71:154   72:150
+     73:58    74:115   75:138   76:111   77:188   78:150   79:158   80:123
+     81:161   82:134   83:134   84:131   85:150   86:150   87:207   88:150
+     89:142   90:127   91:69    92:69    93:69    94:131   95:104   96:131
+     97:111   98:119   99:111  100:119  101:111  102:77   103:119  104:119
+    105:50   106:50   107:111  108:50   109:181  110:119  111:119  112:119
+    113:119  114:73   115:104  116:77   117:119  118:115  119:181  120:115
+    121:115  122:100  123:104  124:104  125:104  126:131  127:207  128:146
+    129:119  130:111  131:111  132:111  133:111  134:111  135:111  136:111
+    137:111  138:111  139:50   140:50   141:50   142:154  143:154  144:119
+    145:177  146:204  147:119  148:119  149:119  150:119  151:119  152:115
+    153:158  154:150  155:122  156:131  157:160  158:207  159:131  160:111
+    161:50   162:119  163:119  164:119  165:150  166:85   167:85   168:108
+    169:104  170:207  171:207  172:207  173:69   174:115  175:115  176:207
+    177:207  178:207  179:207  180:207  181:154  182:154  183:154  184:105
+    185:207  186:207  187:207  188:207  189:129  190:129  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:111  199:154  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:128  208:121
+    209:150  210:119  211:119  212:119  213:51   214:58   215:58   216:58
+    217:207  218:207  219:207  220:207  221:105  222:58   223:207  224:158
+    225:127  226:158  227:158  228:119  229:158  230:123  231:119  232:126
+    233:150  234:150  235:150  236:115  237:142  238:129  239:129  240:72
+    241:207  242:106  243:207  244:130  245:130  246:207  247:129  248:131
+    249:129  250:33   251:81   252:81   253:81   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo UniversBoldItalic
+    MaxNormalCharWidth 188
+    Ascent 167
+    CodeSection 0:255
+      0:207
+      1:207    2:207    3:207    4:207
+      5:131  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:69   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:69   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:125   20:131   21:131   22:207   23:150   24:150
+     25:150   26:150   27:150   28:207   29:150   30:150   31:150   32:69
+     33:69    34:111   35:131   36:131   37:207   38:158   39:69    40:69
+     41:69    42:131   43:207   44:69    45:69    46:69    47:69    48:131
+     49:131   50:131   51:131   52:131   53:131   54:131   55:131   56:131
+     57:131   58:69    59:69    60:207   61:207   62:207   63:108   64:207
+     65:154   66:131   67:146   68:150   69:119   70:115   71:154   72:150
+     73:58    74:115   75:138   76:111   77:188   78:150   79:158   80:123
+     81:161   82:134   83:134   84:131   85:150   86:150   87:207   88:150
+     89:142   90:127   91:69    92:69    93:69    94:131   95:104   96:131
+     97:111   98:119   99:111  100:119  101:111  102:77   103:119  104:119
+    105:50   106:50   107:111  108:50   109:181  110:119  111:119  112:119
+    113:119  114:73   115:104  116:77   117:119  118:115  119:181  120:115
+    121:115  122:100  123:104  124:104  125:104  126:131  127:207  128:146
+    129:119  130:111  131:111  132:111  133:111  134:111  135:111  136:111
+    137:111  138:111  139:50   140:50   141:50   142:154  143:154  144:119
+    145:177  146:204  147:119  148:119  149:119  150:119  151:119  152:115
+    153:158  154:150  155:122  156:131  157:160  158:207  159:131  160:111
+    161:50   162:119  163:119  164:119  165:150  166:85   167:85   168:108
+    169:104  170:207  171:207  172:207  173:69   174:115  175:115  176:207
+    177:207  178:207  179:207  180:207  181:154  182:154  183:154  184:105
+    185:207  186:207  187:207  188:207  189:129  190:129  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:111  199:154  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:128  208:121
+    209:150  210:119  211:119  212:119  213:51   214:58   215:58   216:58
+    217:207  218:207  219:207  220:207  221:105  222:58   223:207  224:158
+    225:127  226:158  227:158  228:119  229:158  230:123  231:119  232:126
+    233:150  234:150  235:150  236:115  237:142  238:129  239:129  240:72
+    241:207  242:106  243:207  244:130  245:130  246:207  247:129  248:131
+    249:129  250:37   251:81   252:81   253:81   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+TypefaceFonts Courier
+    Name "Courier" Serif
+    Translates Telephone
+    FontHeight
+	Height     200
+	Normal     Courier10
+	Bold       Courier10
+	Italic     Courier10
+	BoldItalic Courier10
+	Command    "" !<27>(s0p12h10v3T"
+    EndFontHeight
+    FontHeight
+	Height     240
+	Normal     Courier12
+	Bold       Courier12
+	Italic     Courier12
+	BoldItalic Courier12
+	Command    "" !<27>(s0p10h12v3T"
+    EndFontHeight
+EndTypefaceFonts
+
+TypefaceFonts LinePrinter
+    Name "Lineprinter"
+    Translates Telephone
+    FontHeight
+	Height     170
+	Normal     LinePrinter9
+	Bold       LinePrinter9
+	Italic     LinePrinter9
+	BoldItalic LinePrinter9
+	Command    "<27>(s0p16.67h8.5v0T"
+    EndFontHeight
+EndTypefaceFonts
+
+TypefaceFonts CgTimes
+    Name "CG Times" Proportional Serif
+    Translates Telephone
+    ScalableFontHeight 
+	HeightMin          80    ! min font height 80 twips = 4 point
+	HeightMax          1200  ! max font height 1200 twips ( = 60 point)
+	HeightDelta        20    ! delta font height 20 twips = 1 point
+	Normal             CgTimesStd
+	Bold               CgTimesBold
+	Italic             CgTimesItalic
+	BoldItalic         CgTimesBoldItalic
+	Command            "<27>(s1p%dv4101T"
+    EndScalableFontHeight
+EndTypefaceFonts
+
+TypefaceFonts Univers
+    Name "Univers" Proportional
+    Translates Telephone
+    ScalableFontHeight 
+	HeightMin          80    ! min font height 80 twips = 4 point
+	HeightMax          1200  ! max font height 1200 twips ( = 60 point)
+	HeightDelta        20    ! delta font height 20 twips = 1 point
+	Normal             UniversStd
+	Bold               UniversBold
+	Italic             UniversItalic
+	BoldItalic         UniversBoldItalic
+	Command            "<27>(s1p%dv4148T"
+    EndScalableFontHeight
+EndTypefaceFonts
+
+!ExtraInfo ExtraInfo
+!    "abcdefghijklmnopqrstuvwxyz"
+!    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+!EndExtraInfo
+
+Model HPLJ3
+    Name "HP LaserJet III" RequiresPrinterPort
+	Uid 1000
+    Flags 0
+    Resources Pcl5Resources
+    KPixelWidth    4800   ! Twips = 300 dots per inch
+    KPixelHeight   4800 
+	PortraitOffset  75 0  ! Pixels
+ 	LandscapeOffset 60 0  
+    MinMarginLeft   50    ! Pixels
+    MinMarginRight  50
+    MinMarginTop    50
+    MinMarginBottom 50
+    DisplayMode   Gray2
+    TypefaceFontss
+        Courier
+        LinePrinter	NotInLandscape
+        CgTimes	    NotInPortrait
+        Univers
+    EndTypefaceFontss
+EndModel
+
+Model HPDJ340
+    Name "HP DeskJet 340" RequiresPrinterPort
+	Uid 1100
+    Flags 3	   !  1 = MoveDownOnly, 2 = LanscapeBandOrientationVertical
+    Resources Pcl5Resources
+    KPixelWidth    4800   ! Twips = 300 dots per inch
+    KPixelHeight   4800 
+	PortraitOffset  75 0  ! Pixels
+ 	LandscapeOffset 60 0  
+    MinMarginLeft    50    ! Pixels
+    MinMarginRight   50
+    MinMarginTop     75
+    MinMarginBottom 200
+    DisplayMode   Gray2
+    TypefaceFontss
+	    Courier
+	    LinePrinter
+		CgTimes
+		Univers
+    EndTypefaceFontss
+EndModel
+
+Model HPDJ660C
+    Name "HP DeskJet 660C" RequiresPrinterPort
+	Uid 1200
+    Flags 3	   !  1 = MoveDownOnly, 2 = LanscapeBandOrientationVertical
+    Resources Pcl5Resources
+    KPixelWidth    4800   ! Twips = 300 dots per inch
+    KPixelHeight   4800 
+	PortraitOffset   75 0  ! Pixels
+ 	LandscapeOffset  60 0  
+    MinMarginLeft    50    ! Pixels
+    MinMarginRight   50
+    MinMarginTop     75
+    MinMarginBottom 175
+    DisplayMode   Gray2
+    TypefaceFontss
+	    Courier
+	    LinePrinter
+		CgTimes
+		Univers
+    EndTypefaceFontss
+!	SpareRecord ExtraInfo
+EndModel
+
+PdrStoreFile
+    PDLName             "test"
+    PDLUid 1
+    Models
+        HPLJ3
+		HPDJ340
+        HPDJ660C
+    EndModels
+EndPdrStoreFile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/platmacros.mmp	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			test_platmacros
+TARGETTYPE		EXE
+SOURCEPATH		./src
+SOURCE			platmacros.cpp
+
+// TOOLS2_WINDOWS activated for cross compilation on Linux
+#ifdef TOOLS2_LINUX
+#warning TOOLS2_LINUX
+#endif
+
+#ifdef TOOLS2_WINDOWS
+#warning TOOLS2_WINDOWS
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/LEXICAL.CPP	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,311 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header LEXICAL.CPP
+*
+*/
+
+
+#include "LEXICAL.H"
+
+Lexical::Lexical()
+ :	iType(ELexNL), iNumber(0)
+	{
+	iText[0] = '\0';
+	}
+
+Lexical::Lexical(const Lexical& aLex)
+	{
+	iType = aLex.iType;
+	iNumber = aLex.iNumber;
+	strcpy(iText, aLex.iText);
+	}
+
+Lexical& Lexical::operator = (const Lexical& aLex)
+	{
+	iType = aLex.iType;
+	iNumber = aLex.iNumber;
+	strcpy(iText, aLex.iText);
+	return *this;
+	}
+
+int Lexical::CovertStringToHex()
+	{
+	char* curPtr = iText; // Position of current lexical in line
+	int hexDigit;
+	int number = 0;
+
+	while (HexDigit(*curPtr, hexDigit))
+		{
+		number = (16 * number) + hexDigit;
+		curPtr++;
+		}
+	return number;
+	}
+
+int Lexical::HexDigit(char aDigit, int& decimalEquivalent)
+	{
+	boolean validDigit = efalse;
+	if ((aDigit >= '0') && (aDigit <= '9'))
+		{
+		decimalEquivalent = (aDigit - '0');
+		validDigit = etrue;
+		}
+	else if ((aDigit >= 'a') && (aDigit <= 'f'))
+		{
+		decimalEquivalent = 10 + (aDigit - 'a');
+		validDigit = etrue;
+		}
+	else if ((aDigit >= 'A') && (aDigit <= 'F'))
+		{
+		decimalEquivalent = 10 + (aDigit - 'A');
+		validDigit = etrue;
+		}
+	return validDigit;
+	}
+
+ostream& operator << (ostream& out, const Lexical& aLex)
+	{
+	switch (aLex.iType)
+		{
+		case ELexEOF:
+			{
+			out << "EOF";
+			break;
+			}
+		case ELexNL:
+			{
+			out << "NL";
+			break;
+			}
+		case ELexNumber:
+			{
+			out << aLex.iNumber;
+			break;
+			}
+		case ELexOperator:
+			{
+			out << aLex.iText[0];
+			break;
+			}
+		default:
+			{
+			out << aLex.iText;
+			}
+		}	 
+	return out;
+	}
+
+LexAnal::LexAnal(const char* aFilename)
+ :	iFilename(aFilename)
+	{
+	iFin.open(aFilename);
+	iLex.iType = ELexNL;
+	iLineNo = 0;
+	}
+
+Lexical LexAnal::Read() // read next lexical into iLex
+	{
+	if (iLex.iType == ELexNL)
+		{
+		do
+			{
+			GetNextLex();
+			}
+		while (iLex.iType == ELexNL);
+		}
+	else
+		GetNextLex();
+	return iLex;
+	}
+
+Lexical LexAnal::ReadNextLine() // read first lex on next line
+	{
+	GetNextLine();
+	return iLex;
+	}
+
+void LexAnal::Report()
+	{
+	cerr << iFilename.Text() << '(' << iLineNo << "): \n";
+	cerr << iLine << '\n';
+	for	(char* p = iLine; p < iLexPtr; p++)
+		cerr << ' ';
+	cerr << "^\n";
+	}
+
+LexAnal::~LexAnal()
+	{
+	iFin.close();
+	}
+
+void LexAnal::GetNextLex()
+	{
+	char ch;
+	if (iLex.iType == ELexNL)
+		{
+		iFin.getline(iLine, MaxLineLen);
+		// Remove any CR character that appear at the end when
+		// reading a dos file on unix.
+		PurgeLastCR(iLine);
+		iCurPtr = iLine;
+		iLineNo++;
+		}
+
+	while ((*iCurPtr == ' ') || (*iCurPtr == '\t'))
+		iCurPtr++;
+	ch = *iCurPtr;
+	iLexPtr = iCurPtr;
+
+	if ((ch == '\0') && (iFin.eof()))	// finds lexical type
+		iLex = ReadEOF();
+	else if ((ch == '\0') || (ch == '!'))	// ! is a comment
+		iLex = ReadNewLine();
+	else if ((ch == '-') || ((ch >= '0') && (ch <= '9')))
+		iLex = ReadNumber();
+	else if (((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) || (ch == '_'))
+		iLex = ReadIdent();
+	else if	(ch == '"')
+		iLex = ReadString();
+	else
+		iLex = ReadOperator();	
+	}
+
+void LexAnal::GetNextLine()
+	{
+	iFin.getline(iLine, MaxLineLen);
+	// Remove any CR character that appear at the end when
+	// reading a dos file on unix.
+	PurgeLastCR(iLine);
+	iCurPtr = iLine;
+	iLineNo++;
+
+	char ch;
+	while ((*iCurPtr == ' ') || (*iCurPtr == '\t'))
+		iCurPtr++;
+	ch = *iCurPtr;
+	iLexPtr = iCurPtr;
+
+	if ((ch == '\0') && (iFin.eof()))	// finds lexical type
+		iLex = ReadEOF();
+	else if ((ch == '\0') || (ch == '!'))
+		iLex = ReadNewLine();
+	else if ((ch == '-') || ((ch >= '0') && (ch <= '9')))
+		iLex=ReadNumber();
+	else if (((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) || (ch == '_'))
+		iLex = ReadIdent();
+	else if	(ch == '"')
+		iLex = ReadString();
+	else
+		iLex = ReadOperator();	
+	}
+
+void LexAnal::PurgeLastCR(char *aLine)
+	{
+	int len = strlen(aLine) - 1;
+	if (len >= 0 && aLine[len] == '\r')
+		{
+		aLine[len] = '\0';
+		}
+	}
+
+Lexical LexAnal::ReadEOF()
+	{
+	Lexical lex;
+	lex.iType = ELexEOF;
+	return lex;
+	}
+
+Lexical LexAnal::ReadNewLine()
+	{
+	Lexical lex;
+	lex.iType = ELexNL;
+	while (*iCurPtr != '\0')
+		iCurPtr++;
+	return lex;
+	}
+
+Lexical LexAnal::ReadNumber()
+	{
+	Lexical lex;
+	char ch;
+	boolean negative = efalse;
+	lex.iType = ELexNumber;
+	if (*iCurPtr == '-')
+		{
+		negative = etrue;
+		iCurPtr++;
+		}
+	ch = *iCurPtr;
+	while ((ch >= '0') && (ch <= '9'))
+		{
+		if (negative)
+			lex.iNumber = (10 * lex.iNumber) - (*iCurPtr - '0');
+		else
+			lex.iNumber=(10 * lex.iNumber) + (*iCurPtr - '0');
+		iCurPtr++;
+		ch = *iCurPtr;
+		}
+	return lex;
+	}
+
+
+Lexical LexAnal::ReadIdent()
+	{
+	Lexical lex;
+	char ch;
+	lex.iType = ELexIdent;
+	do
+		{
+		iCurPtr++;
+		ch = *iCurPtr;
+		}
+	while (((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) || (ch == '_') || ((ch >= '0') && (ch <= '9')));
+	strncpy(lex.iText, iLexPtr, iCurPtr - iLexPtr);
+	lex.iText[iCurPtr - iLexPtr] = '\0';
+	return lex;
+	}
+
+Lexical LexAnal::ReadString()
+	{
+	Lexical lex;
+	char ch;
+	lex.iType = ELexString;
+	iCurPtr++;
+	ch = *iCurPtr;
+	while ((ch != '"') && (*iCurPtr != '\0'))
+		{
+		iCurPtr++;
+		ch = *iCurPtr;
+		}
+	strncpy(lex.iText, iLexPtr + 1, iCurPtr - (iLexPtr + 1));
+	lex.iText[iCurPtr - (iLexPtr + 1)] = '\0';
+	if (ch == '"')
+		iCurPtr++;	// finds position after last double quotes 
+	else
+		{
+		cerr << "Warning: missing quotes\n";
+		Report();
+		}
+	return lex;
+	}
+
+Lexical LexAnal::ReadOperator()
+	{
+	Lexical lex;
+	lex.iType = ELexOperator;
+	lex.iText[0] = *iCurPtr;
+	iCurPtr++;
+	return lex;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/PDRREADR.CPP	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,1009 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header PDRREADR.CPP
+*
+*/
+
+
+#include "PDRREADR.H"
+
+const int NumResources=34;
+
+String IdentResource[NumResources] =
+	{
+	"Reset",
+	"SetPageSize",
+	"PreAmble",
+	"PostAmble",
+	"SetTextColor",	//  !!
+	"BoldOn",
+	"BoldOff",
+	"ItalicOn",
+	"ItalicOff",
+	"UnderlineOn",
+	"UnderlineOff",
+	"StrikethroughOn",
+	"StrikethroughOff",
+	"NewPage",
+	"Portrait",
+	"Landscape",
+	"SetXPos",
+	"SetYPos",
+	"IncrementXPos",
+	"IncrementYPos",
+	"CarriageReturn",
+	"SetGraphicsColor",	//  !!
+	"BitmapStart",
+	"BitmapEnd",
+	"ScanLine",
+	"EndScanLine",	//  !!
+	"Resource1",
+	"Resource2",
+	"Resource3",
+	"Resource4",
+	"Resource5",
+	"Resource6",
+	"Resource7",
+	"Resource8"
+	};
+
+const int NumDisplayModeValues = 11;
+
+String IdentDisplayModeValue[NumDisplayModeValues] =
+	{
+	"None",
+	"Gray2",
+	"Gray4",
+	"Gray16",
+	"Gray256",
+	"Color16",
+	"Color256",
+	"Color64K",
+	"Color16M",
+	"Rgb",
+	"Color4K"
+	};
+
+EXPORT_C PdrReader::PdrReader()
+ :	Reader(),
+	iPdrModelStore(),
+	iPdrStoreFile(NULL),
+	iResources(NULL),
+	iTranslates(NULL),
+	iCodeSection(NULL),
+	iFontInfo(NULL),
+	iIndex(Normal),
+	iFontHeight(NULL),
+	iTypefaceFonts(NULL),
+	iModel(NULL)
+	{
+	}
+
+EXPORT_C boolean PdrReader::Read(const String& aFilename)
+	{
+	boolean state = Open(aFilename);
+
+	while (!_EOF() && state)
+		{
+		if (IdentComp(IdentResources))
+			state = ReadResources();
+		else if (IdentComp(IdentTranslates))
+			state = ReadTranslates();
+		else if (IdentComp(IdentFontInfo))
+			state = ReadFontInfo();
+		else if (IdentComp(IdentTypefaceFonts))
+			state = ReadTypefaceFonts();
+//		else if (IdentComp(IdentExtraInfo))
+//			state = ReadExtraInfo();
+		else if (IdentComp(IdentModel))
+			state = ReadModel();
+		else if (IdentComp(IdentPdrStoreFile))
+			state = ReadPdrStoreFile();
+		else
+			{
+			Error("Resource identifier expected");
+			state = efalse;
+			}
+		if (state)
+			state = NewLine();
+		}
+	return state;
+	}
+
+EXPORT_C PdrReader::~PdrReader()
+	{
+	}
+
+boolean PdrReader::ReadResources()
+	{
+	boolean state = etrue;
+	iResources = PdrResources::New();
+	state = IdentCopy(iResources->iLabel);
+	if (state)
+		state = NewLine();
+	while (!IdentComp(IdentEndResources) && !_EOF() && state)
+		{
+   	    int i; // DEF102183: Graphics tools fail to build using MS VC8.
+		for (i = 0; (i < NumResources) && !IdentComp(IdentResource[i]); i++)
+			{	//	Tries to match resources identifier
+			}
+		if (i < NumResources)
+			{
+			PdrResource *resource = PdrResource::New();
+			state = Command(resource->iString);
+			resource->iId = i;
+			if (state)
+				{
+				iResources->AddResource(resource);
+				state = NewLine();
+				}
+			else
+				resource->Delete();
+			}
+		else
+			{
+			state = efalse;
+			Error("Resources identifier expected");
+			}
+		}
+	if (state)
+		{
+		iPdrModelStore.AddResources(iResources);
+		cout << "Resources read\n";
+		}
+	else 
+		iResources->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadTranslates()
+	{
+	int num;
+	boolean state = etrue;
+	iTranslates = PdrTranslates::New();
+	state = IdentCopy(iTranslates->iLabel);
+	if (state)
+		state = NewLine();
+	while (!IdentComp(IdentEndTranslates) && !_EOF() && state)
+		{
+		if (iLex->iType == ELexNumber)
+			{
+			PdrTranslation *translation = PdrTranslation::New();
+			Number(num);
+			translation->iFrom = uint16(num);
+			char ch;
+			state = Operator(ch);
+			if (state)
+				{
+				state = (ch == ':');
+				if (state)
+					{
+					if (iLex->iType == ELexNumber)
+						{
+						state = Number(num);
+						translation->iTo += char(num);
+						}
+					else 
+						{
+						state = Command(translation->iTo);
+						}
+					if (state)
+						state = NewLine();
+					}
+				else
+					{
+					Error("Operator ':' expected");
+					}
+				}
+			if (state)
+				iTranslates->AddTranslation(translation);
+			else
+				translation->Delete();
+			}
+		}
+	if (state)
+		{
+		iPdrModelStore.AddTranslates(iTranslates);
+		cout << "Translates read\n";
+		}
+	else 
+		iTranslates->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadCodeSection(int aCode)
+	{
+	boolean state = etrue;
+	int code;
+	int num;
+	iCodeSection = WidthsCodeSection::New();
+	char ch = 0;
+	state = Number(num);
+	if ((num<aCode) && state)
+		{
+		Error("CodeSection out of sequence");
+		state = efalse;
+		}
+	if (state)
+		{
+		iCodeSection->iStart = uint16(num);
+		state = Operator(ch);
+		if (state)
+			state = (ch == ':');
+		if (state)
+			{
+			state = Number(num);
+			iCodeSection->iEnd = uint16(num);
+			state = NewLine();
+			}
+		else
+			{
+			state = efalse;
+			Error("Operator ':' expected");
+			}
+		}
+	else
+		state = efalse;
+	while (!IdentComp(IdentEndCodeSection) && !_EOF() && state)
+		{
+		if (iLex->iType != ELexNL)
+			{
+			state = Number(code);
+			if ((code != iCodeSection->iStart + iCodeSection->NumWidths()) && state)
+				{
+				state = efalse;
+				Error("Width out of sequence");
+				}
+			if (state)
+				state = Operator(ch);
+			if (state)
+				state = (ch == ':');
+			if (state)
+				{
+				Width *width = Width::New();
+				if (Number(num))
+					{
+					width->iWidthInPixels = (uint16) num;
+					iCodeSection->AddWidth(width);
+					}
+				else
+					{
+					state = efalse;
+					width->Delete();
+					}
+				}
+			}
+		else
+			state = NewLine();
+		}
+	if (state)
+		{
+		num = ((iCodeSection->iEnd + 1) - iCodeSection->iStart);
+		if ((num != iCodeSection->NumWidths()) && (iCodeSection->NumWidths() != 1))
+			{
+			Error("Wrong number of widths in codesection");
+			state = efalse;
+			}
+		}
+	if (state)
+		{
+		iFontInfo->AddCodeSection(iCodeSection);
+//		cout << "Codesection read\n";
+		}
+	else 
+		iCodeSection->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadFontInfo()
+	{
+	boolean state = etrue;
+	iFontInfo = FontInfo::New();
+	int num;
+	state = IdentCopy(iFontInfo->iLabel);
+	if (state)
+		state = NewLine();
+	while (!IdentComp(IdentEndFontInfo) && !_EOF() && state)
+		{
+		if (iLex->iType == ELexIdent)
+			{
+			if (IdentComp(IdentCodeSection))
+				{
+				int code = 0,size = iFontInfo->NumCodeSections();
+				if (size)
+					code = iFontInfo->CodeSectionList(size - 1)->iEnd + 1;
+				state = ReadCodeSection(code);
+				}
+			else if (IdentComp(IdentAscent))
+				{
+				if (Number(num))
+					iFontInfo->iAscentInPixels = uint16(num);
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentMaxNormalCharWidth))
+				{
+				state = Number(num);
+				if (state)
+					iFontInfo->iMaxNormalCharWidthInPixels = uint16(num);
+				}
+			else
+				{
+				Error("Unrecognised fontinfo identifier");
+				state = efalse;
+				}
+			}
+		else
+			{
+			Error("Fontinfo identifier expected");
+			state = efalse;
+			}
+		if (state)
+			state = NewLine();
+		}	  
+	if (state)
+		{
+		iFontInfo->iMaxCharWidthInPixels = 0;
+		for (int i = 0; i < iFontInfo->NumCodeSections(); i++)
+			{
+			WidthsCodeSection* codesection = iFontInfo->CodeSectionList(i);
+			for (int j = 0; j < codesection->NumWidths(); j++)
+				{
+				int width = codesection->WidthList(j)->iWidthInPixels;
+				if (width > iFontInfo->iMaxCharWidthInPixels)
+					iFontInfo->iMaxCharWidthInPixels = (uint16) width;
+				}
+			}
+		}
+	if (state)
+		{
+		iPdrModelStore.AddFontInfo(iFontInfo);
+		cout << "Fontinfo read\n";
+		}
+	else
+		iFontInfo->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadStyle()
+	{
+	boolean state = etrue;
+	Record *fontinfo;
+	PdrStyle *style;
+	String label;
+	if (!iTypefaceFonts->iIsScalable)
+		style = &iFontHeight->iStyle[iIndex];
+	else
+		style = &iTypefaceFonts->iScalableFontHeight.iStyle[iIndex];
+	style->iIsAvailable = etrue;
+	state = IdentCopy(label);
+	if (state)
+		{
+		fontinfo = iPdrModelStore.FindFontInfo(label);
+		if (fontinfo)
+			style->iFontInfo = fontinfo;
+		else
+			{
+			Error("Fontinfo not found");
+			state = efalse;
+			}
+		}
+	return state;
+	}
+
+boolean PdrReader::ReadFontHeight()
+	{
+	boolean state = etrue;
+	int num;
+	if (iTypefaceFonts->iIsScalable == etrue)
+		{
+		state = efalse;
+		Error("Scalablefontheight already defined");
+		}
+	else
+		iFontHeight = PdrFontHeight::New();
+	if (state)
+		state = NewLine();
+
+	while (!IdentComp(IdentEndFontHeight) && !_EOF() && state)
+		{
+		if (iLex->iType == ELexIdent)
+			{
+			if (IdentComp(IdentHeight))
+				{
+				if (Number(num))
+					iFontHeight->iHeightInTwips = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentWidthScale))
+				{
+				if (Number(num))
+					iFontHeight->iWidthScale = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentNormal))
+				{
+				iIndex = Normal;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentBold))
+				{
+				iIndex = Bold;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentItalic))
+				{
+				iIndex = Italic;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentBoldItalic))
+				{
+				iIndex = BoldItalic;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentCommand))
+				{
+				state = Command(iFontHeight->iCommandString);
+				}
+			else
+				{
+				Error("Unrecognised fontheight identifier");
+				state = efalse;
+				}
+			}
+		else
+			{
+			Error("Fontheight identifier expected");
+			state = efalse;
+			}
+		if (state)
+			state = NewLine();
+		}
+	if (state)
+		{
+		iTypefaceFonts->AddFontHeight(iFontHeight);
+		cout << "Fontheight read\n";
+		}
+	else
+		iFontHeight->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadScalableFontHeight()
+	{
+	boolean state = etrue;
+	int num;
+	if (iTypefaceFonts->NumFontHeights())
+		{
+		state = efalse;
+		Error("Non-scalable fontheights already defined");
+		}
+	else if (iTypefaceFonts->iIsScalable == etrue)
+		{
+		state = efalse;
+		Error("Scalablefontheight already defined");
+		}
+	iTypefaceFonts->iIsScalable=etrue;
+	if (state)
+		state = NewLine();
+
+	while (!IdentComp(IdentEndScalableFontHeight) && !_EOF() && state)
+		{
+		if (iLex->iType == ELexIdent)
+			{
+			if (IdentComp(IdentHeightMin))
+				{
+				if (Number(num))
+					iTypefaceFonts->iScalableFontHeight.iHeightMinInTwips = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentHeightMax))
+				{
+				if (Number(num))
+					iTypefaceFonts->iScalableFontHeight.iHeightMaxInTwips = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentHeightDelta))
+				{
+				if (Number(num))
+					iTypefaceFonts->iScalableFontHeight.iHeightDeltaInTwips = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentNormal))
+				{
+				iIndex = Normal;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentBold))
+				{
+				iIndex = Bold;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentItalic))
+				{
+				iIndex = Italic;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentBoldItalic))
+				{
+				iIndex = BoldItalic;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentCommand))
+				{
+				state = Command(iTypefaceFonts->iScalableFontHeight.iCommandString);
+				}
+			else
+				{
+				Error("Unrecognised scalablefontheight identifier");
+				state = efalse;
+				}
+			}
+		else
+			{
+			Error("Scalablefontheight identifier expected");
+			state = efalse;
+			}
+		if (state)
+			state = NewLine();
+		}	  
+	if (state)
+		{
+		cout << "Scalablefontheight read\n";
+		}
+	else
+		{
+		if (!iTypefaceFonts->iIsScalable)
+			iFontHeight->Delete();
+		}
+	return state;
+	}
+
+boolean PdrReader::ReadTypefaceFonts()
+	{
+	boolean state = etrue;
+	Record* translates;
+	String label;
+	iTypefaceFonts = TypefaceFonts::New();
+	state = IdentCopy(iTypefaceFonts->iLabel);
+	if (state)
+		state = NewLine();
+	while (!IdentComp(IdentEndTypefaceFonts) && !_EOF() && state)
+		{
+		if (iLex->iType == ELexIdent)
+			{
+			if (IdentComp(IdentTypefaceName))
+				{
+				if (StringCopy(iTypefaceFonts->iTypeface.iName))
+					while (iLex->iType != ELexNL)
+					{	if (IdentComp(IdentProportional))
+							iTypefaceFonts->iTypeface.iFlags = boolean(iTypefaceFonts->iTypeface.iFlags | Proportional);
+						else if (IdentComp(IdentSerif))
+							iTypefaceFonts->iTypeface.iFlags = boolean(iTypefaceFonts->iTypeface.iFlags | Serif);
+						else if (IdentComp(IdentSymbol))
+							iTypefaceFonts->iTypeface.iFlags = boolean(iTypefaceFonts->iTypeface.iFlags | Symbol);
+						else
+							{ 
+							Error("Typefacefonts identifier or newline expected");
+							state = efalse;
+							}
+					}
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentTypefaceTranslates))
+				{
+				state = IdentCopy(label);
+				if (state)
+					{
+					translates = iPdrModelStore.FindTranslates(label);
+					if (translates)
+						iTypefaceFonts->iTranslates = translates;
+					else
+						{
+						Error("Translates not found");
+						state = efalse;
+						}
+					}
+				}
+			else if (IdentComp(IdentFontHeight))
+				{
+				state = ReadFontHeight();
+				}
+			else if (IdentComp(IdentScalableFontHeight))
+				{
+				state = ReadScalableFontHeight();
+				}
+			else
+				{
+				Error("Unrecognised typefacefonts identifier");
+				state = efalse;
+				}
+			}
+		else
+			{
+			Error("Typefacefonts identifier expected");
+			state = efalse;
+			}
+		if (state)
+			state = NewLine();
+		}	  
+	if (state)
+		{
+		iPdrModelStore.AddTypefaceFonts(iTypefaceFonts);
+		cout << "Typefacefonts read\n";
+		}
+	else
+		iTypefaceFonts->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadModel()
+	{
+	boolean state = etrue;
+	int num;
+	iModel = PrinterModelHeader::New();
+	Record* resources;
+//	Record* extrainfo;
+	String label;
+	state = IdentCopy(iModel->iLabel);
+	if (state)
+		state = NewLine();
+	while (!IdentComp(IdentEndModel) && !_EOF() && state)
+		{
+		if (iLex->iType == ELexIdent)
+			{
+			if	(IdentComp(IdentModelName))
+				{
+				if (StringCopy(iModel->iEntry.iName))
+					while (iLex->iType != ELexNL)
+						{
+						if (IdentComp(IdentRequiresPrinterPort))
+							iModel->iEntry.iRequiresPrinterPort = etrue;
+						else
+							{
+							Error("Model identifier or newline expected");
+							state = efalse;
+							}
+						}
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentModelUid))
+				state = Number(iModel->iEntry.iUid);
+			else if (IdentComp(IdentModelFlags))
+				{
+				state = Number(num);
+				iModel->iInfo.iFlags = num;
+				}
+			else if (IdentComp(IdentModelResources))
+				{
+				state = IdentCopy(label);
+				if (state)
+					{
+					resources = iPdrModelStore.FindResources(label);
+					if (resources)
+						iModel->iInfo.iResources = resources;
+					else
+						{
+						Error("Resources not found");
+						state = efalse;
+						}
+					}
+				}
+/*			else if (IdentComp(IdentSpareRecord))
+				{
+				state = IdentCopy(label);
+				if (state)
+					{
+					extrainfo = iPdrModelStore.FindExtraInfo(label);
+					if (extrainfo)
+						iModel->iInfo.iSpareRecord = extrainfo;
+					else
+						{
+						Error("Spare record not found");
+						state = efalse;
+						}
+					}
+				}
+*/
+			else if (IdentComp(IdentKPixelWidth))
+				{
+				if (Number(num))
+					iModel->iInfo.iKPixelWidthInTwips = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentKPixelHeight))
+				{
+				if (Number(num))
+					iModel->iInfo.iKPixelHeightInTwips = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentPortraitOffset))
+				{
+				if (Number(num))
+					{
+					iModel->iInfo.iPortraitOffsetInPixels.iX = num;
+					if (Number(num))
+						iModel->iInfo.iPortraitOffsetInPixels.iY = num;
+					else
+						state = efalse;
+					}
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentLandscapeOffset))
+				{
+				if (Number(num))
+					{
+					iModel->iInfo.iLandscapeOffsetInPixels.iX = num;
+					if (Number(num))
+						iModel->iInfo.iLandscapeOffsetInPixels.iY = num;
+					else
+						state = efalse;
+					}
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentMinMarginLeft))
+				{
+				if (Number(num))
+					iModel->iInfo.iMinMarginsInPixels.iLeft = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentMinMarginRight))
+				{
+				if (Number(num))
+					iModel->iInfo.iMinMarginsInPixels.iRight = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentMinMarginTop))
+				{
+				if (Number(num))
+					iModel->iInfo.iMinMarginsInPixels.iTop = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentMinMarginBottom))
+				{
+				if (Number(num))
+					iModel->iInfo.iMinMarginsInPixels.iBottom = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentDisplayMode))
+				{
+        	    int i; // DEF102183: Graphics tools fail to build using MS VC8.
+				for (i = 0; (i < NumDisplayModeValues) && !IdentComp(IdentDisplayModeValue[i]); i++)
+					{	// Tries to match display mode identifier
+					}
+				if (i < NumDisplayModeValues)
+					{
+					iModel->iInfo.iDisplayMode = i;
+					}
+				else
+					{
+					state = efalse;
+					Error("Display mode identifier expected");
+					}
+				}
+			else if (IdentComp(IdentTypefaceFontss))
+				{
+				state = NewLine();
+				while (!IdentComp(IdentEndTypefaceFontss) && !_EOF() && state)
+					{
+					TypefaceFontsEntry* typefacefontsentry = NULL;
+					if (iLex->iType == ELexIdent)
+						{
+						state = IdentCopy(label);
+						Record* typefacefonts = iPdrModelStore.FindTypefaceFonts(label);
+						if (typefacefonts)
+							{
+							typefacefontsentry = TypefaceFontsEntry::New(typefacefonts);
+							state = etrue;
+							}
+						else
+							{
+							Error("Typefacefonts not found");
+							state = efalse;
+							}
+						}
+					if (state)
+						{
+						while ((iLex->iType != ELexNL) && !_EOF() && state)
+							{
+							if (IdentComp(IdentNotInPortrait))
+								{
+								typefacefontsentry->iNotInPortrait = etrue;
+								}
+							else if (IdentComp(IdentNotInLandscape))
+								{
+								typefacefontsentry->iNotInLandscape = etrue;
+								}
+							else
+								{
+								Error("Typefacefontsentry identifier or newline expected");
+								state = efalse;
+								}
+							}
+						if (state)
+							iModel->iInfo.AddTypefaceFontsEntry(typefacefontsentry);
+						else
+							typefacefontsentry->Delete();
+						}
+					if (state)
+						state = NewLine();
+					}
+				}
+			else
+				{
+				Error("unrecognised model identifier");
+				state = efalse;
+				}
+			}
+		else
+			{
+			Error("Model identifier expected");
+			state = efalse;
+			}
+		if (state)
+			state = NewLine();
+		}
+	if (state)
+		{
+		iPdrModelStore.AddModel(iModel);
+		cout << "Model read\n";
+		}
+	else
+		iModel->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadPdrStoreFile()
+	{
+	boolean state = etrue;
+	if (iPdrStoreFile)
+		{
+		state = efalse;
+		Error("Pdrstorefile already read");
+		}
+	else
+		{
+		iPdrStoreFile = PdrStoreFile::New();
+		String label;
+		Record* model;
+		state = NewLine();
+		while (!IdentComp(IdentEndPdrStoreFile) && !_EOF() && state)
+			{
+			if (IdentComp(IdentPDLName))
+				{
+				state = StringCopy(iPdrStoreFile->iPDLName);
+				}
+			else if (IdentComp(IdentPDLUid))
+				{
+				state = Number(iPdrStoreFile->iPDLUid);
+				}
+			else if (IdentComp(IdentModels))
+				{
+				state = NewLine();
+				while (!IdentComp(IdentEndModels) && !_EOF() && state)
+					{
+					state = IdentCopy(label);
+					if (state)
+						{
+						model = iPdrModelStore.FindModel(label);
+						if (model)
+							{
+							iPdrStoreFile->AddModel((PrinterModelHeader*)model);
+							}
+						else
+							{
+							Error("model not found");
+							state = efalse;
+							}
+						}
+					if (state)
+						state = NewLine();
+					}
+				}
+			else
+				{
+				Error("Pdrstorefile identifier expected");
+				state = efalse;
+				}
+			if (state)
+				state = NewLine();
+			}
+		if (state)
+			{
+			iPdrModelStore.AddPdrStoreFile(iPdrStoreFile);
+			cout << "Pdrstorefile read\n";
+			}	
+		else
+			iPdrStoreFile->Delete();
+		}
+	return state;
+	}
+
+EXPORT_C boolean PdrReader::Store(const String& aFilename)
+	{
+	boolean state = etrue;
+	if (!iPdrStoreFile)
+		{
+		state = efalse;
+		Error("No pdrstore file record");
+		}
+	else
+		state = iPdrModelStore.Store(aFilename);
+	return state;
+	}
+
+boolean PdrReader::Command(String& aCommand)
+	{
+	boolean state = etrue;
+	String string;
+	state = StringCopy(string);
+	int length = string.Length();
+	for (int i = 0; i < length; i++)
+		{
+		char ch = string[i];
+		if (ch == '<')	// Read control character
+			{
+			ch = 0;
+			for (i = i + 1; (i < length) && (string[i] != '>'); i++)
+				ch = char((ch * 10) + (string[i] - '0'));
+			}
+		aCommand += ch;
+		}
+	return state;
+	}
+/*
+boolean PdrReader::ReadExtraInfo()
+	{
+	boolean state = etrue;
+	String label;
+	PdrExtraInfo* extrainfo = new PdrExtraInfo();
+	state = IdentCopy(extrainfo->iLabel);
+	if (state)
+		state = NewLine();
+	while (!IdentComp(IdentEndExtraInfo) && !_EOF() && state)
+		{
+		String* string = new String;
+		state = Command(*string);
+		if (state)
+			extrainfo->iInfo.Add(string);
+		else
+			delete string;
+		state = NewLine();
+		}
+	if (state)
+		{
+		iPdrModelStore.AddExtraInfo(extrainfo);
+		cout << "Extra info read\n";
+		}
+	else
+		delete extrainfo;
+	return state;
+	}
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/PDRRECRD.CPP	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,785 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header PDRRECRD.CPP
+*
+*/
+
+
+#include "PDRRECRD.H"
+
+EXPORT_C PdrResource* PdrResource::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new PdrResource();
+	}
+
+EXPORT_C void PdrResource::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PdrResource::Externalize(ostream& out)
+	{
+	uint8 id = (uint8) iId;
+	out.write((char*) &id, sizeof(id));
+	iString.Externalize(out);
+	}
+
+EXPORT_C PdrResources* PdrResources::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new PdrResources();
+	}
+
+EXPORT_C void PdrResources::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PdrResources::Externalize(ostream& out)
+	{
+	iStreamId = out.tellp();
+	iPdrResourceList.Externalize(out);
+	}
+
+EXPORT_C void PdrResources::AddResource(PdrResource* aResource)
+/** Adds a printer resource to the object.
+
+@param aResource Printer resource. */
+	{
+	iPdrResourceList.Add(aResource);
+	}
+
+PdrResources::~PdrResources()
+/** Default destructor. */
+	{
+	iPdrResourceList.Destroy();
+	}
+
+EXPORT_C PdrTranslation* PdrTranslation::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new PdrTranslation();
+	}
+
+EXPORT_C void PdrTranslation::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PdrTranslation::Externalize(ostream& out)
+	{
+	out.write((char*) &iFrom, sizeof(iFrom));
+	iTo.Externalize(out);
+	}
+
+EXPORT_C PdrTranslates* PdrTranslates::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new PdrTranslates();
+	}
+
+EXPORT_C void PdrTranslates::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PdrTranslates::Externalize(ostream& out)
+	{
+	iStreamId = out.tellp();
+	iPdrTranslationList.Externalize(out);
+	}
+
+EXPORT_C void PdrTranslates::AddTranslation(PdrTranslation* aTranslation)
+/** Adds a printer translation to the list.
+
+@param aTranslation Reference to a translation. */
+	{
+	iPdrTranslationList.Add(aTranslation);
+	}
+
+PdrTranslates::~PdrTranslates()
+/** This function is internal, and is not intended for use. */
+	{
+	iPdrTranslationList.Destroy();
+	}
+
+EXPORT_C Width* Width::New()
+/** Creates a new instance of this object.
+
+@return Reference to a new object. */
+	{
+	return new Width();
+	}
+
+EXPORT_C void Width::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void Width::Externalize(ostream& out)
+	{
+	out.write ((char*) &iWidthInPixels, sizeof(iWidthInPixels));
+	}
+
+WidthsCodeSection::WidthsCodeSection()
+ :	iWidthList()
+/** This function is internal only, and is not intended for use. */
+	{
+	}
+
+EXPORT_C WidthsCodeSection* WidthsCodeSection::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new WidthsCodeSection();
+	}
+	
+EXPORT_C void WidthsCodeSection::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void WidthsCodeSection::Externalize(ostream& out)
+	{
+	out.write((char*) &iStart, sizeof(iStart));
+	out.write((char*) &iEnd, sizeof(iEnd));
+	iWidthList.Externalize(out);
+	}
+	
+EXPORT_C void WidthsCodeSection::AddWidth(Width* aWidth)
+/** Adds a new font width to the list.
+
+@param aWidth Font width. */
+	{
+	iWidthList.Add(aWidth);
+	}
+
+EXPORT_C Width* WidthsCodeSection::WidthList(int i)
+/** Returns a font width from the list at the position specified.
+
+@param i Position of font width in list.
+@return Reference to a font width. */
+	{
+	return iWidthList[i];
+	}
+
+EXPORT_C int WidthsCodeSection::NumWidths()
+/** Returns the number of font widths in the list.
+
+@return Number of widths. */
+	{
+	return iWidthList.Size();
+	}
+
+WidthsCodeSection::~WidthsCodeSection()
+/** Default destructor. */
+	{
+	iWidthList.Destroy();
+	}
+
+EXPORT_C FontInfo* FontInfo::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new instance of this class. */
+	{
+	return new FontInfo();
+	}
+
+EXPORT_C void FontInfo::Delete()
+/** Deletes the current FontInfo object. */
+	{
+	delete this;
+	}
+
+void FontInfo::Externalize(ostream& out)
+	{
+	iStreamId = out.tellp();
+	out.write((char*) &iAscentInPixels, sizeof(iAscentInPixels));
+	out.write((char*) &iMaxCharWidthInPixels, sizeof(iMaxCharWidthInPixels));
+	out.write((char*) &iMaxNormalCharWidthInPixels, sizeof(iMaxNormalCharWidthInPixels));
+	iCodeSectionList.Externalize(out);
+	}
+
+EXPORT_C void FontInfo::AddCodeSection(WidthsCodeSection* aCodeSection)
+/** Adds a section of information about the font to an internally-stored array.
+
+@param aCodeSection Font information. */
+	{
+	iCodeSectionList.Add(aCodeSection);
+	}	
+
+EXPORT_C WidthsCodeSection* FontInfo::CodeSectionList(int i)
+/** Returns a section of font information from a specified position in the internally-stored 
+array.
+
+@param i Postion of information in the array.
+@return Reference to section of font information. */
+	{
+	return iCodeSectionList[i];
+	}
+
+EXPORT_C int FontInfo::NumCodeSections()
+/** Returns the number of sections of font information in the internally-stored 
+array.
+
+@return Current number of font information sections. */
+	{
+	return iCodeSectionList.Size();
+	}
+
+FontInfo::~FontInfo()
+/** This function is internal, and not intended for use. */
+	{
+	iCodeSectionList.Destroy();
+	}
+
+EXPORT_C PdrStyle* PdrStyle::New()
+/** Creates a new instance of this class
+
+@return Reference to a new object. */
+	{
+	return new PdrStyle();
+	}
+
+EXPORT_C void PdrStyle::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PdrStyle::Externalize(ostream& out)
+	{
+	out.write((char*) &iIsAvailable, sizeof(iIsAvailable));
+	streamoff streamid = 0;
+	if (iIsAvailable)
+		streamid = iFontInfo->iStreamId;
+	::ExternalizeStreamOff(out, streamid);
+	}
+
+PdrStyle::PdrStyle()
+ :	iIsAvailable(efalse)
+/** Default constructor. */
+	{
+	}
+
+EXPORT_C PdrFontHeight* PdrFontHeight::New()
+/** Returns a new instance of this class.
+
+@return Reference to new object. */
+	{
+	return new PdrFontHeight();
+	}
+
+EXPORT_C void PdrFontHeight::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PdrFontHeight::Externalize(ostream& out)
+	{
+	iCommandString.Externalize(out);
+	out.write((char*) &iHeightInTwips, sizeof(iHeightInTwips));
+	out.write((char*) &iWidthScale, sizeof(iWidthScale));
+	for (int style = Normal;style <= BoldItalic; style++)
+		iStyle[style].Externalize(out);
+	}
+
+PdrFontHeight::PdrFontHeight():
+	iWidthScale(1)
+/** Default constructor. */
+	{
+	}
+
+PdrScalableFontHeight::PdrScalableFontHeight()
+/** Default constructor. */
+	{
+	}
+
+void PdrScalableFontHeight::Externalize(ostream& out)
+	{
+	iCommandString.Externalize(out);
+	out.write((char*) &iHeightMinInTwips, sizeof(iHeightMinInTwips));
+	out.write((char*) &iHeightMaxInTwips, sizeof(iHeightMaxInTwips));
+	out.write((char*) &iHeightDeltaInTwips, sizeof(iHeightDeltaInTwips));
+	for (int style = Normal; style <= BoldItalic; style++)
+		iStyle[style].Externalize(out);
+	}
+
+EXPORT_C TypefaceFonts* TypefaceFonts::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new TypefaceFonts();
+	}
+
+EXPORT_C void TypefaceFonts::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void TypefaceFonts::Externalize(ostream& out)
+	{
+	iStreamId = out.tellp();
+	iTypeface.Externalize(out);
+	out.write((char*) &iIsScalable, sizeof(iIsScalable));
+	if (iIsScalable)
+		iScalableFontHeight.Externalize(out);
+	else
+		iFontHeightList.Externalize(out);
+	::ExternalizeStreamOff(out, iTranslates->iStreamId);
+	}
+
+EXPORT_C void TypefaceFonts::AddFontHeight(PdrFontHeight* aFontHeight)
+	{
+	iFontHeightList.Add(aFontHeight);
+	}
+
+EXPORT_C int TypefaceFonts::NumFontHeights()
+/** Returns the number of font height descriptions currently held in the list.
+
+@return Number of descriptions. */
+	{
+	return iFontHeightList.Size();
+	}
+
+PdrFontHeight* TypefaceFonts::FontHeightList(int i)
+/** Returns the font height description from the position specified in the list.
+
+@param i Position of description.
+@return Font height description. */
+	{
+	return iFontHeightList[i];
+	}
+
+TypefaceFonts::TypefaceFonts():
+	iIsScalable(efalse)
+/** This function is internal only, and is not intended for use. */
+	{
+	}
+
+TypefaceFonts::~TypefaceFonts()
+/** This function is internal only, and is not intended for use. */
+	{
+	iFontHeightList.Destroy();
+	}
+
+EXPORT_C TypefaceFontsEntry* TypefaceFontsEntry::New(Record* aTypefaceFonts)
+	{
+	return new TypefaceFontsEntry(aTypefaceFonts);
+	}
+
+EXPORT_C void TypefaceFontsEntry::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+	
+void TypefaceFontsEntry::Externalize(ostream& out)
+	{
+	::ExternalizeStreamOff(out, iTypefaceFonts->iStreamId);
+	out.write((char*) &iNotInPortrait, sizeof(iNotInPortrait));
+	out.write((char*) &iNotInLandscape, sizeof(iNotInLandscape));
+	}
+
+TypefaceFontsEntry::TypefaceFontsEntry(Record* aTypefaceFonts)
+ :	iTypefaceFonts(aTypefaceFonts), iNotInPortrait(efalse), iNotInLandscape(efalse)
+	{
+	}
+
+TypefaceFontsEntry::~TypefaceFontsEntry()
+/** Default destructor. */
+	{
+	}
+
+void Margins::Externalize(ostream& out)
+	{
+	out.write((char*) &iLeft, sizeof(iLeft));
+	out.write((char*) &iRight, sizeof(iRight));
+	out.write((char*) &iTop, sizeof(iTop));
+	out.write((char*) &iBottom, sizeof(iBottom));
+	}
+
+/*
+PdrExtraInfo::~PdrExtraInfo()
+	{
+	iInfo.Destroy();
+	}
+
+void PdrExtraInfo::Externalize(ostream& out)
+	{
+	iInfo.Externalize(out);
+	}
+*/
+
+void PdrModelInfo::Externalize(ostream& out)
+	{
+	iStreamId=out.tellp();
+	out.write((char*) &KPdrtranVersion, sizeof(KPdrtranVersion));
+	out.write((char*) &iFlags, sizeof(iFlags));
+	out.write((char*) &iKPixelWidthInTwips, sizeof(iKPixelWidthInTwips));
+	out.write((char*) &iKPixelHeightInTwips, sizeof(iKPixelHeightInTwips));
+	iPortraitOffsetInPixels.Externalize(out);
+	iLandscapeOffsetInPixels.Externalize(out);
+	iMinMarginsInPixels.Externalize(out);
+	out.write((char*) &iDisplayMode, sizeof(iDisplayMode));
+	iTypefaceFontsEntryList.Externalize(out);
+	::ExternalizeStreamOff(out, iResources->iStreamId);
+	streamoff streamid = 0;
+	if (iSpareRecord)
+		streamid = iSpareRecord->iStreamId;
+	::ExternalizeStreamOff(out, streamid);
+	}
+ 
+EXPORT_C void PdrModelInfo::AddTypefaceFontsEntry(TypefaceFontsEntry* aTypefaceFontsEntry)
+/** Adds an entry containing information about typeface fonts to an internally-stored 
+array.
+
+@param aTypefaceFontsEntry Typeface font information. */
+	{
+	iTypefaceFontsEntryList.Add(aTypefaceFontsEntry);
+	}
+
+int PdrModelInfo::NumTypefaceFontsEntries()
+/** Returns the number of entries containing information about typeface fonts in 
+the internally-stored array.
+
+@return Number of entries. */
+	{
+	return iTypefaceFontsEntryList.Size();
+	}
+
+TypefaceFontsEntry* PdrModelInfo::TypefaceFontsEntryList(int i)
+/** Returns the typeface font entry stored the internal array from the position 
+specified.
+
+@param i Position in array.
+@return Typeface font entry. */
+	{
+	return iTypefaceFontsEntryList[i];
+	}
+
+PdrModelInfo::PdrModelInfo()
+ :	iStreamId(0),
+	iFlags(0),
+	iKPixelWidthInTwips(0),
+	iKPixelHeightInTwips(0),
+	iPortraitOffsetInPixels(),
+	iLandscapeOffsetInPixels(),
+	iMinMarginsInPixels(),
+	iDisplayMode(0),
+	iTypefaceFontsEntryList(),
+	iResources(NULL),
+	iSpareRecord(NULL)	// !! Not used yet
+/** Default constructor. */
+	{
+	}
+
+PdrModelInfo::~PdrModelInfo()
+/** Default destructor. */
+	{
+	iTypefaceFontsEntryList.Destroy();
+	}
+
+PrinterModelEntry::PrinterModelEntry()
+ :	iName(), iRequiresPrinterPort(efalse), iUid(KNullUid)
+/** Default constructor. */
+	{
+	}
+
+void PrinterModelEntry::Externalize(ostream& out)
+	{
+	iName.Externalize(out);
+	out.write((char*) &iRequiresPrinterPort, sizeof(iRequiresPrinterPort));
+	out.write((char*) &iUid, sizeof(iUid));
+	}
+
+EXPORT_C PrinterModelHeader* PrinterModelHeader::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new PrinterModelHeader();
+	}
+
+EXPORT_C void PrinterModelHeader::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PrinterModelHeader::Externalize(ostream& out)
+	{
+	iEntry.Externalize(out);
+	::ExternalizeStreamOff(out, iInfo.iStreamId);
+	}
+
+void PrinterModelHeader::ExternalizeData(ostream& out)
+	{
+	iInfo.Externalize(out);
+	}
+
+boolean PrinterModelHeader::IsPdrModel()
+/** Determines whether printer information is available for this printer model.
+
+@return ETrue: printer description is available. */
+	{
+	return iInfo.NumTypefaceFontsEntries() || iInfo.iResources;
+	}
+
+EXPORT_C PdrStoreFile* PdrStoreFile::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new PdrStoreFile();
+	}
+
+EXPORT_C void PdrStoreFile::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+EXPORT_C void PdrStoreFile::AddModel(PrinterModelHeader* aModel)
+/** Adds a printer model.
+
+@param aModel Printer model. */
+	{
+	iModelList.Add(aModel);
+	if (aModel->IsPdrModel())
+		{
+		for (int i = 0; i < aModel->iInfo.NumTypefaceFontsEntries(); i++)
+			AddTypefaceFonts((TypefaceFonts*) aModel->iInfo.TypefaceFontsEntryList(i)->iTypefaceFonts);
+		iResourcesList.Add(aModel->iInfo.iResources);
+//		if (aModel->iInfo.iSpareRecord)
+//			iExtraInfoList.Add(aModel->iInfo.iSpareRecord);
+		}
+	}
+
+void PdrStoreFile::Externalize(ostream& out)
+	{
+	ExternalizeHeader(out);
+	ExternalizeComponents(out);
+	}
+
+void PdrStoreFile::ExternalizeHeader(ostream& out)
+	{
+	out.write((char*) &KStoreWriteOnceLayoutUid, sizeof(KStoreWriteOnceLayoutUid));
+	out.write((char*) &KPdrStoreFileUid, sizeof(KPdrStoreFileUid));
+	out.write((char*) &KNullUid, sizeof(KNullUid));
+	out.write((char*) &KPdrStoreFileChecksum, sizeof(KPdrStoreFileChecksum));
+	::ExternalizeStreamOff(out, iStreamId);
+	iStreamId = out.tellp();
+	iPDLName.Externalize(out);
+	out.write((char*) &iPDLUid, sizeof(iPDLUid));
+	iModelList.Externalize(out);
+	}
+
+void PdrStoreFile::AddTypefaceFonts(TypefaceFonts* aTypefaceFonts)
+	{
+	iTypefaceFontsList.Add(aTypefaceFonts);
+	iTranslatesList.Add(aTypefaceFonts->iTranslates);
+	if (aTypefaceFonts->iIsScalable)
+		{
+		for (int style = Normal; style <= BoldItalic; style++)
+			{
+			if (aTypefaceFonts->iScalableFontHeight.iStyle[style].iIsAvailable)
+				iFontInfoList.Add(aTypefaceFonts->iScalableFontHeight.iStyle[style].iFontInfo);
+			}
+		}
+	else
+		{
+		for (int j = 0; j < aTypefaceFonts->NumFontHeights(); j++)
+			{
+			PdrFontHeight* fontheight = aTypefaceFonts->FontHeightList(j);
+			for (int style = Normal; style <= BoldItalic; style++)
+				{
+				if (fontheight->iStyle[style].iIsAvailable)
+					iFontInfoList.Add(fontheight->iStyle[style].iFontInfo);
+				}
+			}
+		}
+	}
+
+void PdrStoreFile::ExternalizeComponents(ostream& out)
+	{
+	for (int i = 0; i < iModelList.Size(); i++)
+		{
+		PrinterModelHeader* model = (PrinterModelHeader*) iModelList[i];
+		if (model->IsPdrModel())
+			model->ExternalizeData(out);
+		}
+	iTypefaceFontsList.Externalize(out);
+	iFontInfoList.Externalize(out);
+	iResourcesList.Externalize(out);
+	iTranslatesList.Externalize(out);
+//	iExtraInfoList.Externalize(out);
+	}
+
+PdrStoreFile::PdrStoreFile()
+ :	Record(),
+	iPDLName(),
+	iPDLUid(KNullUid),
+	iModelList(),
+	iTypefaceFontsList(),
+	iFontInfoList(),
+	iResourcesList(),
+	iTranslatesList()
+/** This function is internal only, and is not intended for use. */
+	{
+	}
+
+EXPORT_C boolean PdrModelStore::Store(const String& aFilename)
+/** Externalizes printer information from the store to the specfied external file.
+
+@param aFilename Filename.
+@return ETrue: store successful. */
+	{
+	boolean state = efalse;
+	ofstream fout;
+	String string = aFilename;
+	fout.open(string.Text(), ios::binary);
+	if (!fout.fail())
+		{
+		iPdrStoreFile->Externalize(fout);
+		fout.close();
+		fout.open(string.Text(), ios::binary | ios::trunc);
+		iPdrStoreFile->Externalize(fout);
+		fout.close();
+		state = etrue;
+		}
+	return state;
+	}
+
+EXPORT_C void PdrModelStore::AddPdrStoreFile(PdrStoreFile* aPdrStoreFile)
+	{
+	iPdrStoreFile = aPdrStoreFile;
+	}
+
+EXPORT_C void PdrModelStore::AddModel(PrinterModelHeader *aModel)
+/** Adds a printer model to the store.
+
+@param aModel Printer model. */
+	{
+	iModelList.Add(aModel);
+	}
+
+EXPORT_C Record *PdrModelStore::FindModel(String& aLabel)
+	{
+	return iModelList.LabelToRecord(aLabel);
+	}
+
+EXPORT_C void PdrModelStore::AddTypefaceFonts(TypefaceFonts *aTypefaceFonts)
+/** Adds typeface information to the store.
+
+@param aTypefaceFonts Typeface fonts. */
+	{
+	iTypefaceFontsList.Add(aTypefaceFonts);
+	}
+
+EXPORT_C Record *PdrModelStore::FindTypefaceFonts(String& aLabel)
+	{
+	return iTypefaceFontsList.LabelToRecord(aLabel);
+	}
+
+EXPORT_C void PdrModelStore::AddFontInfo(FontInfo *aFontInfo)
+/** Adds font information to the store.
+
+@param aFontInfo Font information. */
+	{
+	iFontInfoList.Add(aFontInfo);
+	}
+
+EXPORT_C Record *PdrModelStore::FindFontInfo(String& aLabel)
+	{
+	return iFontInfoList.LabelToRecord(aLabel);
+	}
+
+EXPORT_C void PdrModelStore::AddResources(PdrResources *aResources)
+	{
+	iResourcesList.Add(aResources);
+	}
+
+EXPORT_C Record *PdrModelStore::FindResources(String& aLabel)
+	{
+	return iResourcesList.LabelToRecord(aLabel);
+	}
+
+EXPORT_C void PdrModelStore::AddTranslates(PdrTranslates *aTranslates)
+/** Adds printer translations to the store.
+
+@param aTranslates Translation list. */
+	{
+	iTranslatesList.Add(aTranslates);
+	}
+
+EXPORT_C Record *PdrModelStore::FindTranslates(String& aLabel)
+	{
+	return iTranslatesList.LabelToRecord(aLabel); 
+	}
+
+	/*
+void PdrModelStore::AddExtraInfo(PdrExtraInfo *aInfo)
+	{
+	iExtraInfoList.Add(aInfo);
+	}
+
+Record* PdrModelStore::FindExtraInfo(String& aLabel)
+	{
+	return iExtraInfoList.LabelToRecord(aLabel);
+	}
+*/
+
+PdrModelStore::PdrModelStore()
+ :	iPdrStoreFile(NULL),
+	iModelList(),
+	iTypefaceFontsList(),
+	iFontInfoList(),
+	iResourcesList()//,
+//	iExtraInfoList()
+/** Default constructor. */
+	{
+	}
+
+PdrModelStore::~PdrModelStore()
+/** Default destructor. */
+	{
+	delete iPdrStoreFile;
+	iModelList.Destroy();
+	iTypefaceFontsList.Destroy();
+	iFontInfoList.Destroy();
+	iResourcesList.Destroy();
+	iTranslatesList.Destroy();
+//	iExtraInfoList.Destroy();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/PDRTRAN.CPP	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header PDRTRAN.CPP
+*
+*/
+
+
+#include "PDRREADR.H"
+
+bool OutputUnicode = false;
+
+// Input and output filenames entered in command line
+int main(int argc, char *argv[])  
+	{
+	cout << "\nPDRTRAN V";
+	cout << KPdrtranVersion << "\n";
+	cout << "Copyright (c) 1998-2004 Symbian Software Ltd.\n";
+
+	if(argc!=3)
+		{
+		cout << "Usage:	PDRTRAN srcfile [srcfile2 ..] destfile\n";
+		cout << "where srcfile is the file containing printer models,\n";
+		cout << "typeface information and character width tables, and\n";
+		cout << "destfile is the pdr store file.\n";
+		return -1;
+		}
+	
+	PdrReader reader;
+
+	for (int i = 1; i < argc - 1; i++)
+		{
+		if (!reader.Read(argv[i]))
+			{
+			cerr << "Problem encountered in file " << argv[i] << "\n";
+			return -1;
+			}
+		}
+	if (!reader.Store(argv[argc - 1]))
+		{
+		cerr << "Problem writing pdr file " << argv[argc - 1] << "\n";
+		return -1;
+		}
+	cout << argv[argc-1] << " created\n";
+	return 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/READER.CPP	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header READER.CPP
+*
+*/
+
+
+#include "READER.H"
+
+Reader::Reader()
+	{
+	iLexAnal = NULL;
+	}
+
+boolean Reader::Open(const String& aFilename)
+	{
+	boolean state;
+	String string = aFilename;
+	if (iLexAnal != NULL)
+		delete iLexAnal;
+	iLexAnal = new LexAnal(string.Text());
+
+	if (iLexAnal)
+		{
+		state = etrue;
+		iLex =& (iLexAnal->iLex);
+		iLexAnal->Read();	// reads first lexical
+		}
+	else
+		state = efalse;
+
+	return state;
+	}
+
+Reader::~Reader()
+	{
+	if (iLexAnal != NULL)
+		delete iLexAnal;
+	}
+
+boolean Reader::_EOF()
+	{
+	return ((iLex->iType) == ELexEOF);
+	}
+
+boolean Reader::NewLine()
+	{
+	boolean state;
+	if (iLex->iType == ELexNL)
+		{
+		iLexAnal->Read();
+		state = etrue;
+		}
+	else
+		{
+		Error(String("Newline expected"));
+		state = efalse;
+		}
+	return state;
+	}
+
+boolean Reader::Number(int& aNumber)
+	{
+	boolean state;
+	if (iLex->iType == ELexNumber)
+		{
+		aNumber = iLex->iNumber;
+		iLexAnal->Read();
+		state = etrue;
+		}
+	else
+		{
+		Error(String("Number expected"));
+		state = efalse;
+		}
+	return state;
+	}
+
+boolean Reader::IdentComp(const String& aIdent)
+	{
+	boolean state;
+	if (iLex->iType == ELexIdent)
+		{
+		if (aIdent == iLex->iText)
+			{
+			iLexAnal->Read();
+			state = etrue;
+			}
+		else
+			state = efalse;
+		}
+	else
+		{
+		state = efalse;
+		}
+	return state;
+	}
+
+boolean Reader::IdentCopy(String& aIdent)
+	{
+	boolean state;
+	if (iLex->iType == ELexIdent)
+		{
+		aIdent = iLex->iText;
+		iLexAnal->Read();
+		state = etrue;
+		}
+	else
+		{
+		Error(String("Identifier expected"));
+		state = efalse;
+		}
+	return state;
+	}
+
+boolean Reader::StringCopy(String& aString)
+	{
+	boolean state;
+	if (iLex->iType == ELexString)
+		{
+		aString = iLex->iText;
+		iLexAnal->Read();
+		state = etrue;
+		}
+	else
+		{
+		Error(String("String expected"));
+		state = efalse;
+		}
+	return state;
+	}
+
+boolean Reader::Operator(char& aCh)
+	{
+	boolean state;
+	if (iLex->iType == ELexOperator)
+		{
+		aCh = iLex->iText[0];
+		iLexAnal->Read();
+		state = etrue;
+		}
+	else
+		{
+		Error(String("Operator expected"));
+		state = efalse;
+		}
+	return state;
+	}
+
+EXPORT_C void Reader::Error(const String& aString)
+	{
+	cerr << "Error: " << aString;
+	iLexAnal->Report();
+	while ((iLex->iType != ELexNL) && (iLex->iType != ELexEOF))
+		iLexAnal->Read();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/RECORD.CPP	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header RECORD.CPP
+*
+*/
+
+
+#include "RECORD.H"
+
+EXPORT_C Record::Record()
+ :	iLabel(), iStreamId(0)
+	{
+	}
+
+void RecordList::ExternalizeIds(ostream& out)
+	{
+	int32 i;
+	int32 size = Size();
+	out.write((char*) &size, sizeof(size));
+	for (i = 0; i < size; i++)
+		{
+		::ExternalizeStreamOff(out, (*this)[i]->iStreamId);
+		}
+	}
+
+void RecordList::Externalize(ostream& out)
+	{
+	int32 size = Size();
+	out.write ((char*) &size, sizeof(size));
+	for (int i = 0; i < size; i++)
+		(*this)[i]->Externalize(out);
+	}
+
+void RecordList::ExternalizeComponents(ostream& out)
+	{
+	int32 size = Size();
+	for (int i = 0; i < size; i++)
+		(*this)[i]->ExternalizeComponents(out);
+	}
+
+EXPORT_C void RecordList::Add(Record* aRecord)
+	{
+	if (!LabelToRecord(aRecord->iLabel))
+		List<Record*>::Add(aRecord);
+	}
+
+EXPORT_C Record *RecordList::LabelToRecord(const String& aLabel)
+	{
+	int32 size = Size();
+	Record *record=NULL;
+	if (aLabel.Length())
+		for (int i = 0; i < size; i++)
+			if ((*this)[i]->iLabel == aLabel)
+				record = (*this)[i];
+	return record;
+	}
+
+EXPORT_C void RecordList::Destroy()
+	{
+	List<Record*>::Destroy();
+	}
+
+EXPORT_C RecordList::~RecordList()
+	{
+	}
+
+EXPORT_C Typeface::Typeface()
+ :	iName(), iFlags(0)
+	{
+	}
+
+void Typeface::Externalize(ostream& out)
+	{
+	iName.Externalize(out);
+	out.put((char) iFlags);
+	}
+
+void Point::Externalize(ostream& out)
+	{
+	out.write((char*) &iX, sizeof(iX));
+	out.write((char*) &iY, sizeof(iY));
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/STRNG.CPP	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,151 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header STRNG.CPP
+*
+*/
+
+
+#include "STRNG.H"
+
+extern bool OutputUnicode;
+
+ostream& operator << (ostream& out, const String& aString)
+	{
+	for (int i = 0; i < aString.iLength; i++)
+		out << aString.iText[i];
+	out << '\n';
+	return out;
+	}
+
+EXPORT_C void String::Externalize(ostream& out)
+	{
+	if (OutputUnicode)
+		{
+		// Convert the string to Unicode, allowing #NNNN (each N is a hex digit)
+		// to represent an arbitrary Unicode character. Other values are just
+		// extended, so don't use codepage 1252 values in the range 128..159.
+		unsigned short* buffer = new unsigned short[iLength];
+		int i = 0;
+		int j = 0;
+		while (i < iLength)
+			{
+			if (iText[i] == '#')
+				{
+				i++;
+				char hex[5];
+				hex[0] = iText[i++];
+				hex[1] = iText[i++];
+				hex[2] = iText[i++];
+				hex[3] = iText[i++];
+				hex[4] = 0;
+				buffer[j++] = (unsigned short)strtoul(hex, NULL, 16);
+				}
+			else
+				{
+				buffer[j] = iText[i];
+				buffer[j] &= 0xFF;
+				i++;
+				j++;
+				}
+			}
+		int unicode_characters = j;
+		int32 length = (unicode_characters << 1);	// 16-bit data
+		if (length < 0x80)
+			{
+			unsigned char len = (unsigned char)(length << 1);
+			out.write((char*)&len, sizeof(len));
+			}
+		else if (length < 0x4000)
+			{
+			uint16 len = (uint16)((length << 2) + 1);
+			out.write((char*)&len, sizeof(len));
+			}
+		else
+			{
+			// assert len<0x20000000 ?
+			uint32 len = (uint32)((length << 3) + 3);
+			out.write((char*)&len, sizeof(len));
+			}
+		// Output Unicode characters using the Standard Compression Scheme for Unicode.
+		// To save the bother of doing this properly, use a degenerate form whereby each
+		// Unicode character is output as itself. 0x0F selects Unicode mode and 0xF0 quotes
+		// characters that would conflict with other tags.
+		out << (unsigned char)0x0F;
+
+		for (i = 0; i < unicode_characters; i++)
+			{
+			unsigned char hi = (unsigned char)(buffer[i] >> 8);
+			unsigned char lo = (unsigned char)buffer[i];
+			if ((hi >= 0xe0) && (hi <= 0xf2))
+				out << 0xf0;
+			out << hi;
+			out << lo;
+			}
+
+		delete [] buffer;
+		}
+	else
+		{
+		int32 length = (iLength << 1) + 1;	// 8-bit data
+		if (length < 0x80)
+			{
+			unsigned char len = (unsigned char)(length << 1);
+			out.write((char*)&len, sizeof(len));
+			}
+		else if (length < 0x4000)
+			{
+			uint16 len = (uint16)((length << 2) + 1);
+			out.write((char*)&len, sizeof(len));
+			}
+		else
+			{
+			// assert len<0x20000000 ?
+			uint32 len = (uint32)((length << 3) + 3);
+			out.write((char*)&len, sizeof(len));
+			}
+		out.write(iText, iLength);
+		}
+	}
+
+EXPORT_C int String::CreateText(const int aLength)
+	{
+	if (aLength != iLength)
+		{
+		char* text = new char[aLength + 1];
+		if (text)
+			{
+			iLength = aLength;
+			iText = text;
+			}
+		else
+			{
+			iLength = 0;
+			delete [] iText;
+			iText = NULL;
+			}
+		}
+	return iLength;
+	}
+
+EXPORT_C void String::DeleteText(char* aText) const
+	{
+	if (aText != iText)
+		delete [] aText;
+	}
+
+EXPORT_C String::~String()
+	{
+	delete [] iText;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/platmacros.cpp	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+int main()
+{
+	return 0;
+}
--- a/sbsv2/raptor/test/smoke_suite/timeout.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/timeout.py	Fri Apr 16 19:32:39 2010 +0100
@@ -26,10 +26,10 @@
 	t.id = "60a"
 	t.name = "timeout"
 	t.usebash = True
-	t.command = "sbs -b smoke_suite/test_resources/timeout/bld.inf -f-"
+	t.command = "sbs -b smoke_suite/test_resources/timeout/bld.inf -f -"
 
-	t.mustmatch = [
-		"status exit='failed' code='" + exitCode + "' attempt='1' *reason='timeout'",
+	t.mustmatch_singleline = [
+		"status exit='failed' code='" + exitCode + "' attempt='1' reason='timeout'",
 	]
 	t.errors = -1
 	t.returncode = 1
@@ -38,12 +38,12 @@
 	t.id = "60b"
 	t.name = "timeout with retries"
 	t.usebash = True
-	t.command = "sbs -b smoke_suite/test_resources/timeout/bld.inf -t 3 -f-"
+	t.command = "sbs -b smoke_suite/test_resources/timeout/bld.inf -t 3 -f -"
 
-	t.mustmatch = [
-		"status exit='retry' code='" + exitCode + "' attempt='1' *reason='timeout'",
-		"status exit='retry' code='" + exitCode + "' attempt='2' *reason='timeout'",
-		"status exit='failed' code='" + exitCode + "' attempt='3' *reason='timeout'",
+	t.mustmatch_singleline = [
+		"status exit='retry' code='" + exitCode + "' attempt='1' reason='timeout'",
+		"status exit='retry' code='" + exitCode + "' attempt='2' reason='timeout'",
+		"status exit='failed' code='" + exitCode + "' attempt='3' reason='timeout'",
 	]
 	t.errors = -1
 	t.returncode = 1
--- a/sbsv2/raptor/test/smoke_suite/tools.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/tools.py	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -20,19 +20,15 @@
 	t = SmokeTest()
 	t.id = "52"
 	t.name = "tools"
-	# Do not run with j > 1 because of known issues
-	t.command = "sbs -b smoke_suite/test_resources/tools/bld.inf -c tools -j1"
+	t.command = "sbs -b smoke_suite/test_resources/tools/bld.inf -c tools"
 	t.targets = [
 		"$(EPOCROOT)/epoc32/release/tools/deb/tool_exe.bsc",
 		"$(EPOCROOT)/epoc32/release/tools/deb/tool_exe.exe",
 		"$(EPOCROOT)/epoc32/release/tools/deb/tool_exe.ilk",
-		"$(EPOCROOT)/epoc32/release/tools/deb/tool_exe.pdb",
 		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib1.bsc",
 		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib1.lib",
-		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib1.pdb",
 		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib2.bsc",
 		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib2.lib",
-		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib2.pdb",
 		"$(EPOCROOT)/epoc32/release/tools/rel/tool_exe.exe",
 		"$(EPOCROOT)/epoc32/release/tools/rel/tool_lib1.lib",
 		"$(EPOCROOT)/epoc32/release/tools/rel/tool_lib2.lib",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tools2_cross_compilation.py	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,175 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()	
+	t.description = "Tests Raptor can build win32 tools on linux"
+
+	t.id = "111a"
+	t.name = "tools2_cross_compilation_pdrtran" 
+	t.command = "sbs -b smoke_suite/test_resources/tools2/cross/BLD.INF -p PDRTRAN.MMP -c tools2 -c tools2.win32"
+
+	t.targets = [
+			"$(EPOCROOT)/epoc32/release/tools2/deb/pdrtran.exe",
+			"$(EPOCROOT)/epoc32/release/tools2/rel/pdrtran.exe",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/pdrtran",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/pdrtran",
+			"$(EPOCROOT)/epoc32/tools/pdrtran.exe",
+			"$(EPOCROOT)/epoc32/tools/pdrtran"
+			]
+	t.addbuildtargets("smoke_suite/test_resources/tools2/cross/BLD.INF", [
+			"pdrtran_/pdrtran_exe/tools2/deb/PDRTRAN.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/LEXICAL.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/PDRREADR.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/PDRRECRD.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/READER.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/RECORD.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/STRNG.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/PDRTRAN.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/LEXICAL.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/PDRREADR.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/PDRRECRD.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/READER.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/RECORD.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/STRNG.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/PDRTRAN.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/LEXICAL.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/PDRREADR.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/PDRRECRD.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/READER.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/RECORD.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/STRNG.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/PDRTRAN.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/LEXICAL.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/PDRREADR.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/PDRRECRD.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/READER.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/RECORD.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/STRNG.o"
+			])
+	t.run("linux")
+
+	
+	t.id = "111b"
+	t.name = "tools2_cross_compilation_libs"
+	t.command = "sbs -b smoke_suite/test_resources/tools2/bld.inf -c tools2.win32 -c tools2"
+
+	t.targets = [
+			"$(EPOCROOT)/epoc32/release/tools2/deb/tool_exe.exe",
+			"$(EPOCROOT)/epoc32/release/tools2/deb/libtool_lib1.a",
+			"$(EPOCROOT)/epoc32/release/tools2/deb/libtool_lib2.a",
+			"$(EPOCROOT)/epoc32/release/tools2/rel/tool_exe.exe",
+			"$(EPOCROOT)/epoc32/release/tools2/rel/libtool_lib1.a",
+			"$(EPOCROOT)/epoc32/release/tools2/rel/libtool_lib2.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/tool_exe",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/libtool_lib1.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/libtool_lib2.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/tool_exe",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/libtool_lib1.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/libtool_lib2.a",
+			"$(EPOCROOT)/epoc32/tools/tool_exe.exe",
+			"$(EPOCROOT)/epoc32/tools/tool_exe"
+			]
+	t.addbuildtargets("smoke_suite/test_resources/tools2/bld.inf", [
+			"libtool_lib1_a/libtool_lib1_lib/tools2/rel/tool_lib1_b.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/rel/tool_lib1_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/rel/tool_lib2_b.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/rel/tool_lib2_a.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/deb/tool_lib1_b.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/deb/tool_lib1_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/deb/tool_lib2_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/deb/tool_lib2_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/rel/tool_exe_a.o",
+			"tool_exe_exe/tool_exe_exe/tools2/rel/tool_exe_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/deb/tool_exe_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/deb/tool_exe_a.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib1_b.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib1_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib2_b.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib2_a.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib1_b.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib1_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib2_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib2_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/rel/$(HOSTPLATFORM_DIR)/tool_exe_a.o",
+			"tool_exe_exe/tool_exe_exe/tools2/rel/$(HOSTPLATFORM_DIR)/tool_exe_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/deb/$(HOSTPLATFORM_DIR)/tool_exe_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/deb/$(HOSTPLATFORM_DIR)/tool_exe_a.o"
+			])
+	t.run("linux")
+
+
+	t.usebash = True
+	t.id = "111c"
+	t.name = "tools2_cross_compilation_toolcheck_linux"
+	t.command = "$(EPOCROOT)/epoc32/tools/pdrtran smoke_suite/test_resources/tools2/cross/TEST.PD $(EPOCROOT)/epoc32/build/TEST_PDRTRAN.PDR"
+	t.targets = [
+		 	"$(EPOCROOT)/epoc32/build/TEST_PDRTRAN.PDR"
+			]
+	t.mustmatch = [
+			"PDRTRAN V41"
+			]		
+	t.run("linux")
+
+	
+	t.id = "111d"
+	t.name = "tools2_cross_compilation_toolcheck_windows"
+	t.command = "file $(EPOCROOT)/epoc32/tools/pdrtran.exe"
+	t.targets = []
+	t.mustmatch = [
+			"MS Windows"
+			]		
+	t.run("linux")
+
+
+	t.id = "111e"
+	t.name = "tools2_cross_compilation_platmacro_linux"
+	t.command = "sbs -b smoke_suite/test_resources/tools2/cross/BLD.INF -p platmacros.mmp -c tools2"
+	t.targets = [
+			"$(EPOCROOT)/epoc32/tools/test_platmacros"
+			]
+	t.mustmatch = [
+			"TOOLS2_LINUX"
+			]
+	t.mustnotmatch = [
+			"TOOLS2_WINDOWS"
+			]
+	t.warnings = 1
+	t.run("linux")
+
+
+	t.id = "111f"
+	t.name = "tools2_cross_compilation_platmacro_windows"
+	t.command = "sbs -b smoke_suite/test_resources/tools2/cross/BLD.INF -p platmacros.mmp -c tools2.win32"
+	t.targets = [
+			"$(EPOCROOT)/epoc32/tools/test_platmacros.exe"
+			]
+	t.mustmatch = [
+			"TOOLS2_WINDOWS"
+			]
+	t.mustnotmatch = [
+			"TOOLS2_LINUX"
+			]
+	t.warnings = 1
+	t.run("linux")
+
+
+	t.id = "111"
+	t.name = "tools2_cross_compilation"
+	t.print_result()
+	return t
--- a/sbsv2/raptor/test/smoke_suite/tracecompiler_general.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/tracecompiler_general.py	Fri Apr 16 19:32:39 2010 +0100
@@ -18,9 +18,6 @@
 from raptor_tests import AntiTargetSmokeTest
 
 def run():
-	result = SmokeTest.PASS
-	failed = []
-
 	t = SmokeTest()
 	t.description = "Testcases (ID 0101a - 0101d) test trace compiler"
 	# General test for trace compiler, which generates
@@ -64,13 +61,8 @@
 		"testtc_dll/armv5/urel/testTC{000a0000}.def",
 		"testtc_dll/tracecompile_testTC_1000008d.done"
 	])
-	# Trace compiler doesn't work on Linux for time being. Once it's fixed, will apply all 
-	# trace compiler tests to linux as well.
-	t.run("windows")
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-		failed.append(t.name)
-
+	t.run()
+	
 	# General CLEAN test for trace compiler outputs
 	t = AntiTargetSmokeTest()
 	t.id = "101b"
@@ -84,11 +76,8 @@
 	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
 		"testtc_dll/tracecompile_testTC_1000008d.done"
 	])
-	t.run("windows")
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-		failed.append(t.name)
-		
+	t.run()
+			
 	t = SmokeTest()
 	t.id = "101c"
 	t.name = "TC_bv_path"
@@ -112,11 +101,8 @@
 		"helloworld_exe/armv5/urel/HelloWorld_urel_objects.via",
 		"helloworld_exe/tracecompile_HelloWorld_e78a5aa3.done"
 	])
-	t.run("windows")
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-		failed.append(t.name)
-	
+	t.run()
+
 	# 101d-101f test trace compiler auto mechanism, which is used to avoid wasting time on source 
 	# containing no osttraces.
 	# Trace compiler only runs when there are osttraces code in source. Raptor decides this by
@@ -136,10 +122,7 @@
 		"test_/armv5/urel/test.o",
 		"test_/tracecompile_autorun1_00000001.done"
 	])
-	t.run("windows")
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-		failed.append(t.name)
+	t.run()
 	
 	t = AntiTargetSmokeTest()
 	t.id = "101e"
@@ -160,10 +143,7 @@
 	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
 		"test_/tracecompile_autorun2_00000001.done"
 	])
-	t.run("windows")
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-		failed.append(t.name)
+	t.run()
 
 	t = AntiTargetSmokeTest()
 	t.id = "101f"
@@ -184,10 +164,7 @@
 	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
 		"test_/tracecompile_autorun3_00000001.done"
 	])
-	t.run("windows")
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-		failed.append(t.name)
+	t.run()
 
 	# Test trace compiler doesn't run when it is switched off
 	# Trace compiler switch is off by default. To turn it on use variant ".tracecompiler". 
@@ -208,21 +185,11 @@
 	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
 		"test_/tracecompile_autorun1_00000001.done"
 	])
-	t.run("windows")
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-		failed.append(t.name)
-	
+	t.run()
 
+
+	t.id = "101"
 	t.name = "tracecompiler_general"
-	t.result = result
-
-	print "\nOverall Result : " + result.upper() + "\n"
-	if result == SmokeTest.FAIL:
-		print len(failed), "tests failed:"
-		for x in failed:
-			print x
-		print	
-
+	t.print_result()
 	return t
 
--- a/sbsv2/raptor/test/smoke_suite/tracecompiler_incremental.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/tracecompiler_incremental.py	Fri Apr 16 19:32:39 2010 +0100
@@ -23,7 +23,7 @@
 	t.name = "tracecompiler_incremental_clean"
 	t.usebash = True
 	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5_urel.tracecompiler CLEAN"
-	t.run("windows")
+	t.run()
 
 	t.id = "114b"
 	t.name = "tracecompiler_incremental_prebuild"
@@ -32,8 +32,6 @@
 	t.targets = [
 		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC.dso",
 		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.dso",
-		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.lib",
-		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC.lib",
 		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll",
 		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll.map",
 		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitTraces.h",
@@ -43,14 +41,14 @@
 		"$(EPOCROOT)/epoc32/ost_dictionaries/testTC_0x1000008d_Dictionary.xml",
 		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/testTC_0x1000008d_TraceDefinitions.h"
 		]
-	t.run("windows")
+	t.run()
 
 	t.id = "114c"
 	t.name = "tracecompiler_incremental_rebuild"
 	t.command = "touch smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinit.cpp && sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5_urel.tracecompiler -f - -m ${SBSMAKEFILE}"
 	t.countmatch = [ ["name='compile'",1] ]
 	t.targets = []
-	t.run("windows")
+	t.run()
 
 	t.id = "114"
 	t.name = "tracecompiler_incremental"
--- a/sbsv2/raptor/test/smoke_suite/tracecompiler_variants.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/tracecompiler_variants.py	Fri Apr 16 19:32:39 2010 +0100
@@ -1,11 +1,23 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
 
 from raptor_tests import SmokeTest
 from raptor_tests import AntiTargetSmokeTest
 
 def run():
-	result = SmokeTest.PASS
-	failed = []
-
 	# 102a - 102b Test running trace compiler on one mmp with different source files controlled macros. 
 	t = AntiTargetSmokeTest()
 	t.description = "Testcases (ID 102a - 102c) test trace compiler running with variants and macros"
@@ -70,10 +82,7 @@
 		"variant_source_/winscw/udeb/var_source3.o",
 		"variant_source_/winscw/urel/var_source3.o"
 	])
-	t.run("windows")
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-		failed.append(t.name)
+	t.run()
 
 	# 2nd time build includes var_source1 and var_source3 for variant_source.mmp
 	t = SmokeTest()
@@ -127,11 +136,7 @@
 		"variant_source_/winscw/urel/var_source3.o.d",
 		"variant_source_/tracecompile_variant_source_10000003.done"
 	])
-	t.run("windows")
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-		failed.append(t.name)
-
+	t.run()
 
 	# Build multiple variants together, which involves different source files in one mmp
 	# Raptor only call trace compiler once no matter how many variants
@@ -171,11 +176,7 @@
 		"tc_variants_/armv5.phone3/urel/tc_c.o",
 		"tc_variants_/tracecompile_tc_variants_10000004.done"
 	])	
-	t.run("windows")
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-		failed.append(t.name)
-
+	t.run()
 
 	# 102d and 102e is to test a very rare situation, where one mmpfile includes 3 children mmpfiles, 
 	# which are guarded by macros. They share some source file, and two share the same UID3. 
@@ -225,10 +226,7 @@
 		"child3_/tracecompile_child3_exe_11100002.done"
 	])
 	t.warnings = 3
-	t.run("windows")
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-		failed.append(t.name)
+	t.run()
 
 	# Clean mmp A then build mmp B and C. As common.cpp is shared by A B and C, commonTraces.h would be 
 	# cleaned when cleaning mmp A. But as B and C aren't cleaned, Raptor wouldn't run trace compiler on
@@ -271,22 +269,12 @@
 		"child3_/tracecompile_child3_exe_11100002.done"
 	])
 	t.warnings = 3
-	t.run("windows")
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-		failed.append(t.name)
+	t.run()
 
 
+	t.id = "102"
 	t.name = "tracecompiler_variants"
-	t.result = result
-
-	print "\nOverall Result : " + result.upper() + "\n"
-	if result == SmokeTest.FAIL:
-		print len(failed), "tests failed:"
-		for x in failed:
-			print x
-		print	
-
-	t.id = "102"
+	t.print_result()
+	
 	return t
 
--- a/sbsv2/raptor/test/smoke_suite/tracecompiler_whatlog.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/tracecompiler_whatlog.py	Fri Apr 16 19:32:39 2010 +0100
@@ -24,7 +24,7 @@
 	t.name = "tracecompiler_whatlog_clean"
 	t.usebash = True
 	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld2.inf -c armv5.tracecompiler CLEAN"
-	t.run("windows")
+	t.run()
 
 	t = CheckWhatSmokeTest()
 	t.description = "Trace Compiler Whatlog test"
@@ -37,8 +37,6 @@
 	t.targets = [
 		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC.dso",
 		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.dso",
-		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.lib",
-		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC.lib",
 		"$(EPOCROOT)/epoc32/release/armv5/udeb/testTC.dll",
 		"$(EPOCROOT)/epoc32/release/armv5/udeb/testTC.dll.map",
 		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll",
@@ -55,8 +53,6 @@
 		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/group/bld2.inf' mmp='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/group/test.TC.mmp' config='armv5_udeb.tracecompiler'>",
 		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/testTC.dso</build>",
 		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.dso</build>",
-		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.lib</build>",
-		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/testTC.lib</build>",
 		"<build>$(EPOCROOT)/epoc32/release/armv5/udeb/testTC.dll</build>",
 		"<build>$(EPOCROOT)/epoc32/release/armv5/udeb/testTC.dll.map</build>",
 		"<build>$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll</build>",
@@ -64,7 +60,8 @@
 		"<build>$(EPOCROOT)/epoc32/ost_dictionaries/test_TC_0x1000008d_Dictionary.xml</build>",
 		"<build>$(EPOCROOT)/epoc32/include/internal/SymbianTraces/autogen/test_TC_0x1000008d_TraceDefinitions.h</build>"
 		]		
-	t.run("windows")
+	t.run()
+
 	t.id = "112"
 
 	return t
--- a/sbsv2/raptor/test/unit_suite/generic_path_unit.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/unit_suite/generic_path_unit.py	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -136,6 +136,21 @@
 		path6 = generic_path.Path("m:/")
 		self.assertEqual(str(path6), "m:")
 		
+		# SpaceSafePath
+		
+		epocroot = os.path.abspath(os.environ.get('EPOCROOT')).replace('\\','/').rstrip('/')
+		pathwithspaces = epocroot+"/epoc32/build/Program Files/Some tool installed with spaces/no_spaces/s p c/no_more_spaces"
+		path7 = generic_path.Path(pathwithspaces)
+
+		# SpaceSafe paths on Windows are 8.3 format, and these can only be deduced if they actually exist.	
+		os.makedirs(pathwithspaces)
+		spacesafe = path7.GetSpaceSafePath()
+		self.assertTrue(spacesafe.endswith("PROGRA~1/SOMETO~1/NO_SPA~1/SPC~1/NO_MOR~1"))
+		
+		os.removedirs(pathwithspaces)
+		spacesafe = path7.GetSpaceSafePath()		
+		self.assertEqual(spacesafe, None)
+
 		
 	def testClassLinux(self):
 		if self.isWin32():
@@ -173,6 +188,15 @@
 		path = generic_path.Path("some/thing/")
 		self.assertEqual(str(path), "some/thing")
 		
+		# SpaceSafePath
+		
+		# This doesn't mean much on non-Windows platforms, but we confirm nothing breaks if it is used
+		pathwithspaces = "/Program Files/Some tool installed with spaces/no_spaces/s p c/no_more_spaces"
+		path2 = generic_path.Path(pathwithspaces)
+	
+		spacesafe = path2.GetSpaceSafePath()		
+		self.assertEqual(spacesafe, None)
+		
  
 # run all the tests
 
--- a/sbsv2/raptor/test/unit_suite/raptor_data_unit.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/test/unit_suite/raptor_data_unit.py	Fri Apr 16 19:32:39 2010 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -21,6 +21,7 @@
 import raptor
 import raptor_cache
 import raptor_data
+import sys
 import unittest
 
 class TestRaptorData(unittest.TestCase):
@@ -35,6 +36,8 @@
 			self.envStack[name] = os.environ[name]
 		os.environ[name] = value
 		
+	def isWin(self):
+		return 'win' in raptor.hostplatform
 			
 	def RestoreEnv(self, name):
 		# put environment back to its state before SetEnv
@@ -355,7 +358,9 @@
 		self.assertEqual(varcfg, "/C/variant/variant.cfg")
 		
 	def testProblematicEnvironment(self):
-		# ask for environment variable values that will break makefile parsing due to
+		aRaptor = raptor.Raptor()		
+		
+		# 1: ask for environment variable values that will break makefile parsing due to
 		# backslashes forming line continuation characters
 		self.SetEnv("ENVVAR_BSLASH_END1", "C:\\test1a\\;C:\\test1b\\")
 		self.SetEnv("ENVVAR_BSLASH_END2", "C:\\test2a\\;C:\\test2b\\\\")
@@ -365,7 +370,6 @@
 		var.AddOperation(raptor_data.Env("ENVVAR_BSLASH_END2"))
 		var.AddOperation(raptor_data.Env("ENVVAR_BSLASH_END3"))
 
-		aRaptor = raptor.Raptor()
 		eval = aRaptor.GetEvaluator(None, var.GenerateBuildUnits(aRaptor.cache)[0])
 		self.RestoreEnv("ENVVAR_BSLASH_END1")
 		self.RestoreEnv("ENVVAR_BSLASH_END2")
@@ -379,6 +383,75 @@
 		
 		value = eval.Get("ENVVAR_BSLASH_END3")
 		self.assertEqual(value, "C:\\test3a\\;C:\\test3b\\\\\\\\")
+		
+		# 2: check 'tool' and 'toolchain' type environment variable values for correct behaviour when paths contain spaces
+		# this is different depending on host OS platform and whether or not the paths/tools actually exist
+		epocroot = os.path.abspath(os.environ.get('EPOCROOT')).replace('\\','/').rstrip('/')
+		pathwithspaces = epocroot+"/epoc32/build/Program Files/Some tool installed with spaces/no_spaces/s p c/no_more_spaces"
+		toolwithspaces = pathwithspaces+"/testtool.exe"	
+		self.SetEnv("ENVVAR_TOOL_WITH_SPACES", toolwithspaces)
+		self.SetEnv("ENVVAR_TOOLCHAINPATH_WITH_SPACES", pathwithspaces)
+		toolVar = raptor_data.Variant("tool.var")
+		toolchainpathVar = raptor_data.Variant("toolchainpath.var")
+		toolVar.AddOperation(raptor_data.Env("ENVVAR_TOOL_WITH_SPACES", "", "tool"))
+		toolchainpathVar.AddOperation(raptor_data.Env("ENVVAR_TOOLCHAINPATH_WITH_SPACES", "", "toolchainpath"))
+		invalidValueException = "the environment variable %s is incorrect - it is a '%s' type but contains spaces that cannot be neutralised:"
+		
+		# 2a: paths/tools exist - on Windows we expect 8.3 paths post-evaluation, on all other platforms error exceptions
+		os.makedirs(pathwithspaces)
+		testtool = open(toolwithspaces,'wb')
+		testtool.close()
+		
+		exceptionText = ""
+		value = ""
+		try:
+			eval = aRaptor.GetEvaluator(None, toolVar.GenerateBuildUnits(aRaptor.cache)[0])
+			value = eval.Get("ENVVAR_TOOL_WITH_SPACES")
+		except Exception, e:
+			exceptionText = str(e)
+			
+		if self.isWin():
+			self.assertTrue(value)
+			self.assertFalse(' ' in value)
+		else:
+			self.assertTrue(exceptionText.startswith(invalidValueException % ("ENVVAR_TOOL_WITH_SPACES", "tool")))
+
+		exceptionText = ""
+		value = ""
+		try:
+			eval = aRaptor.GetEvaluator(None, toolchainpathVar.GenerateBuildUnits(aRaptor.cache)[0])
+			value = eval.Get("ENVVAR_TOOLCHAINPATH_WITH_SPACES")
+		except Exception, e:
+			exceptionText = str(e)
+			
+		if self.isWin():
+			self.assertTrue(value)
+			self.assertFalse(' ' in value)
+		else:
+			self.assertTrue(exceptionText.startswith(invalidValueException % ("ENVVAR_TOOLCHAINPATH_WITH_SPACES", "toolchainpath")))
+		
+		# 2b: paths/tools don't exist - should throw error exceptions on all platforms as 8.3 paths are only available
+		# for use if a path/tool exists
+		os.remove(toolwithspaces)
+		os.removedirs(pathwithspaces)
+
+		exceptionText = ""
+		try:
+			eval = aRaptor.GetEvaluator(None, toolVar.GenerateBuildUnits(aRaptor.cache)[0])
+		except Exception, e:
+			exceptionText = str(e)
+		self.assertTrue(exceptionText.startswith(invalidValueException % ("ENVVAR_TOOL_WITH_SPACES", "tool")))
+
+		exceptionText = ""
+		try:
+			eval = aRaptor.GetEvaluator(None, toolchainpathVar.GenerateBuildUnits(aRaptor.cache)[0])
+		except Exception, e:
+			exceptionText = str(e)			
+		self.assertTrue(exceptionText.startswith(invalidValueException % ("ENVVAR_TOOLCHAINPATH_WITH_SPACES", "toolchainpath")))
+
+		# clean-up
+		self.RestoreEnv("ENVVAR_TOOL_WITH_SPACES")
+		self.RestoreEnv("ENVVAR_TOOLCHAINPATH_WITH_SPACES")
 	
 	def testMissingEnvironment(self):
 		# ask for an environment variable that is not set
@@ -430,8 +503,105 @@
 		self.failUnless(self.checkForParam(p, "D", None))
 		f = extended.GetFLMIncludePath(cache)
 		self.assertEqual(f.File(), "base.flm")
+
+	def testGetBuildUnits(self):
+		r = raptor.Raptor()
+
+		# <group name="g1">
+		g1 = raptor_data.Group("g1")
+		r.cache.AddGroup(g1)
+		
+		# <groupRef ref="g2" mod="A.B"/>
+		g2a = raptor_data.GroupRef()
+		g2a.SetProperty("ref", "g2")
+		g2a.SetProperty("mod", "A.B")
+		g1.AddChild(g2a)
+		
+		# <groupRef ref="g2" mod="C.D"/>
+		g2b = raptor_data.GroupRef()
+		g2b.SetProperty("ref", "g2")
+		g2b.SetProperty("mod", "C.D")
+		g1.AddChild(g2b)
+		
+		# <group name="g2">
+		g2 = raptor_data.Group("g2")
+		r.cache.AddGroup(g2)
+		
+		# <varRef ref="V" mod="E.F"/>
+		v2 = raptor_data.VariantRef()
+		v2.SetProperty("ref", "V")
+		v2.SetProperty("mod", "E.F")
+		g2.AddChild(v2)
+		
+		# <varRef ref="V" mod="G.H"/>
+		v3 = raptor_data.VariantRef()
+		v3.SetProperty("ref", "V")
+		v3.SetProperty("mod", "G.H")
+		g2.AddChild(v3)
+		
+		# <aliasRef ref="X" mod="I.J"/>
+		v4 = raptor_data.AliasRef()
+		v4.SetProperty("ref", "X")
+		v4.SetProperty("mod", "I.J")
+		g2.AddChild(v4)
+		
+		# <aliasRef ref="X" mod="K.L"/>
+		v5 = raptor_data.AliasRef()
+		v5.SetProperty("ref", "X")
+		v5.SetProperty("mod", "K.L")
+		g2.AddChild(v5)
+		
+		r.cache.AddVariant(raptor_data.Variant("A"))
+		r.cache.AddVariant(raptor_data.Variant("B"))
+		r.cache.AddVariant(raptor_data.Variant("C"))
+		r.cache.AddVariant(raptor_data.Variant("D"))
+		r.cache.AddVariant(raptor_data.Variant("E"))
+		r.cache.AddVariant(raptor_data.Variant("F"))
+		r.cache.AddVariant(raptor_data.Variant("G"))
+		r.cache.AddVariant(raptor_data.Variant("H"))
+		r.cache.AddVariant(raptor_data.Variant("I"))
+		r.cache.AddVariant(raptor_data.Variant("J"))
+		r.cache.AddVariant(raptor_data.Variant("K"))
+		r.cache.AddVariant(raptor_data.Variant("L"))
+		
+		r.cache.AddVariant(raptor_data.Variant("V"))
+		
+		# <alias name="X" meaning="A.B.C.D.E.F.G.H/>
+		alias = raptor_data.Alias("X")
+		alias.SetProperty("meaning", "A.B.C.D.E.F.G.H")
+		r.cache.AddAlias(alias)
+
+		r.cache.AddVariant(raptor_data.Variant("Y"))
+		r.cache.AddVariant(raptor_data.Variant("Z"))
 	
-	
+		units = raptor_data.GetBuildUnits(["g1.Y", "g1.Z"], r.cache, r)
+		
+		# <group name="g1">
+		#   <groupRef ref="g2" mod="A.B"/>    g2.A.B
+		#   <groupRef ref="g2" mod="C.D"/>    g2.C.D
+		# </group>
+		# <group name="g2">
+		#   <varRef ref="V" mod="E.F"/>       V.E.F
+		#   <varRef ref="V" mod="G.H"/>       V.G.H
+		#   <aliasRef ref="X" mod="I.J"/>     X.I.J
+		#   <aliasRef ref="X" mod="K.L"/>     X.K.L
+		# </group>
+		# <alias name="X" meaning="A.B.C.D.E.F.G.H/>
+		#
+		expected = [ "VEFABY", "VGHABY", "ABCDEFGHIJABY", "ABCDEFGHKLABY",
+				     "VEFCDY", "VGHCDY", "ABCDEFGHIJCDY", "ABCDEFGHKLCDY",
+		             "VEFABZ", "VGHABZ", "ABCDEFGHIJABZ", "ABCDEFGHKLABZ",
+				     "VEFCDZ", "VGHCDZ", "ABCDEFGHIJCDZ", "ABCDEFGHKLCDZ" ]
+		
+		self.failUnlessEqual(len(units), len(expected))
+		
+		for u in units:
+			vars = "".join([v.name for v in u.variants])
+			self.failUnless(vars in expected, vars + " was not expected")
+			expected.remove(vars)
+		
+		self.failUnless(len(expected) == 0, str(expected) + " not found")
+		
 # run all the tests
 
 from raptor_tests import SmokeTest
--- a/sbsv2/raptor/util/install-linux/package_sbs.sh	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/util/install-linux/package_sbs.sh	Fri Apr 16 19:32:39 2010 +0100
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -61,7 +61,7 @@
 fi
 
 
-   echo init.xml LICENSE.txt RELEASE-NOTES.txt; cd $SBS_HOME && find bin lib $BINARIES python test schema util |
+   cd $SBS_HOME && find license.txt RELEASE-NOTES.html bin lib notes $BINARIES python test schema util |
 	grep -v "$TMPSBS"'/python/\.py$' |
 	grep -v 'flm/test'  |
 	grep -v 'util/build'  | 
--- a/sbsv2/raptor/util/install-windows/raptorinstallermaker.py	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/util/install-windows/raptorinstallermaker.py	Fri Apr 16 19:32:39 2010 +0100
@@ -30,13 +30,28 @@
 tempdir = ""
 
 parser = optparse.OptionParser()
-parser.add_option("-s", "--sbs-home", dest="sbshome",
-                  help="Path to use as SBS_HOME environment variable. If not present the script exits.")
-parser.add_option("-w", "--win32-support", dest="win32support",
-                  help="Path to Win32 support directory. If not present the script exits.")
+
+parser.add_option("-s", "--sbs-home", dest="sbshome", help="Path to use as SBS_HOME environment variable. If not present the script exits.")
+
+parser.add_option("-w", "--win32-support", dest="win32support", help="Path to Win32 support directory. If not present the script exits.")
+
+parser.add_option("-b", "--bv", dest="bv", help="Path to Binary variation CPP \"root\" directory. Can be a full/relatitve path; prefix with \"WIN32SUPPORT\\\" to be relative to the Win32 support directory. Omitting this value will assume a default to a path inside the Win32 support directory.")
+
+parser.add_option("-c", "--cygwin", dest="cygwin", help="Path to Cygwin \"root\" directory. Can be a full/relatitve path; prefix with \"WIN32SUPPORT\\\" to be relative to the Win32 support directory. Omitting this value will assume a default to a path inside the Win32 support directory.")
+
+parser.add_option("-m", "--mingw", dest="mingw", help="Path to MinGW \"root\" directory. Can be a full/relatitve path; prefix with \"WIN32SUPPORT\\\" to be relative to the Win32 support directory. Omitting this value will assume a default to a path inside the Win32 support directory.")
+
+parser.add_option("-p", "--python", dest="python", help="Path to Python \"root\" directory. Can be a full/relatitve path; prefix with \"WIN32SUPPORT\\\" to be relative to the Win32 support directory. Omitting this value will assume a default to a path inside the Win32 support directory.")
+
+parser.add_option("--prefix", dest="versionprefix", help="A string to use as a prefix to the Raptor version string. This will be present in the Raptor installer's file name, the installer's pages as well as the in output from sbs -v.", type="string", default="")
+
+parser.add_option("--postfix", dest="versionpostfix", help="A string to use as a postfix to the Raptor version string. This will be present in the Raptor installer's file name, the installer's pages as well as the in output from sbs -v.", type="string", default="")
 
 (options, args) = parser.parse_args()
 
+# Required directories inside the win32-support repository
+win32supportdirs = {"bv":"bv", "cygwin":"cygwin", "mingw":"mingw", "python":"python264"}
+
 if options.sbshome == None:
 	print "ERROR: no SBS_HOME passed in. Exiting..."
 	sys.exit(2)
@@ -45,16 +60,33 @@
 	print "ERROR: no win32support directory specified. Unable to proceed. Exiting..."
 	sys.exit(2)
 else:
-	# Required irectories inside the win32-support repository
-	win32supportdirs = ["bv", "cygwin", "mingw", "python264"]
-	for dir in win32supportdirs:
-		if not os.path.isdir(os.path.join(options.win32support, dir)):
+	# Check for command line overrides to defaults
+	for directory in win32supportdirs:
+		print "TEST %s" % directory
+		value = getattr(options,directory)
+		print "value =  %s" % str(value)
+		if value != None: # Command line override
+			if value.lower().startswith("win32support"):
+				# Strip off "WIN32SUPPORT\" and join to Win32 support location
+				win32supportdirs[directory] = os.path.join(options.win32support, value[13:]) 
+			else:
+				# Relative to current directory
+				win32supportdirs[directory] = value
+
+		else: # Use default location
+			win32supportdirs[directory] = os.path.join(options.win32support, win32supportdirs[directory])
+	
+	print "\n\nwin32supportdirs = %s\n\n" % win32supportdirs
+
+	# Check that all the specified directories exist and exit if any of them is missing.
+	for directory in win32supportdirs:
+		dir = win32supportdirs[directory]
+		if os.path.isdir(dir):
+			print "Found directory %s" % dir
+		else:
 			print "ERROR: directory %s does not exist. Cannot build installer. Exiting..." % dir
 			sys.exit(2)
 
-def parseconfig(xmlFile="raptorinstallermaker.xml"):
-	pass
-
 def generateinstallerversionheader(sbshome = None):
 	shellenv = os.environ.copy()
 	shellenv["PYTHONPATH"] = os.path.join(sbshome, "python")
@@ -83,6 +115,29 @@
 	fh.close()
 	print "Wrote raptorversion.nsh"
 	return 0
+
+def generateinstallerversion(sbshome = None):
+	shellenv = os.environ.copy()
+	shellenv["PYTHONPATH"] = os.path.join(sbshome, "python")
+	
+	raptorversioncommand = "python -c \"import raptor_version; print raptor_version.numericversion()\""
+	
+	# Raptor version is obtained from raptor_version module's numericversion function.
+	sbs_version_matcher = re.compile(".*(\d+\.\d+\.\d+).*", re.I)
+	
+	# Create Raptor subprocess
+	versioncommand = subprocess.Popen(raptorversioncommand, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=shellenv)
+	raptorversion = ""
+	# Get all the lines matching the RE
+	for line in versioncommand.stdout.readlines():
+		res = sbs_version_matcher.match(line)
+		if res:
+			raptorversion = res.group(1)
+			print "Successfully determined Raptor version %s" % raptorversion
+
+	versioncommand.wait() # Wait for process to end
+	
+	return raptorversion
 	
 def unzipnsis(pathtozip):
     global tempdir
@@ -113,8 +168,14 @@
 	print "Done."
 
 makensispath = unzipnsis(".\\NSIS.zip")
-generateinstallerversionheader(options.sbshome)
-nsiscommand = makensispath + " /DRAPTOR_LOCATION=%s /DWIN32SUPPORT=%s raptorinstallerscript.nsi" % (options.sbshome, options.win32support)
+# generateinstallerversionheader(options.sbshome)
+raptorversion = options.versionprefix + generateinstallerversion(options.sbshome) + options.versionpostfix
+nsiscommand = makensispath + " /DRAPTOR_LOCATION=%s /DBV_LOCATION=%s /DCYGWIN_LOCATION=%s /DMINGW_LOCATION=%s /DPYTHON_LOCATION=%s /DRAPTOR_VERSION=%s raptorinstallerscript.nsi" % (options.sbshome, 
+				win32supportdirs["bv"],
+				win32supportdirs["cygwin"],
+				win32supportdirs["mingw"],
+				win32supportdirs["python"],
+				raptorversion)
 print "nsiscommand = %s" % nsiscommand
 runmakensis(nsiscommand)
 cleanup()
--- a/sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi	Fri Apr 16 19:32:39 2010 +0100
@@ -44,10 +44,9 @@
 
 # Custom includes (depend on above variables so much be here)
 !include "raptorinstallerutils.nsh" # Functions and macros for handling environment variables
-!include "raptorversion.nsh" # Define the RAPTOR_VERSION variable
+# !include "raptorversion.nsh" # Define the RAPTOR_VERSION variable
 
 # Defines
-# !define /date DATE_STAMP "%Y-%m-%d-%H-%M-%S"
 !define INSTALLER_NAME "Raptor v${RAPTOR_VERSION}"
 !define RAPTOR "sbs"
 !define INSTALLER_FILENAME "${RAPTOR}-${RAPTOR_VERSION}.exe"
@@ -79,8 +78,7 @@
 
 ##################### Pages in the installer #####################
 !insertmacro MUI_PAGE_WELCOME
-# Temporarily useing RELEASE-NOTES.txt as there is not license.txt
-!insertmacro MUI_PAGE_LICENSE ${RAPTOR_LOCATION}\RELEASE-NOTES.txt
+!insertmacro MUI_PAGE_LICENSE ${RAPTOR_LOCATION}\license.txt
 !define MUI_PAGE_HEADER_TEXT "Installation type"
 Page custom UserOrSysInstall UserOrSysInstallLeave
 !define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirLeave # Directory page exit function - disallow spaces in $INSTDIR
@@ -112,19 +110,21 @@
     File /r /x distribution.policy.s60 ${RAPTOR_LOCATION}\python\*.*
     SetOutPath "$INSTDIR\schema"
     File /r /x distribution.policy.s60 ${RAPTOR_LOCATION}\schema\*.*
-    SetOutPath "$INSTDIR\win32"
-    File /r /x distribution.policy.s60 ${RAPTOR_LOCATION}\win32\*.*
+    SetOutPath "$INSTDIR\win32\bin"
+    File /r /x distribution.policy.s60 ${RAPTOR_LOCATION}\win32\bin\*.*
     SetOutPath "$INSTDIR\win32\bv"
-    File /r /x distribution.policy.s60 /x .hg ${WIN32SUPPORT}\bv\*.*
+    File /r /x distribution.policy.s60 /x .hg ${BV_LOCATION}\*.*
     SetOutPath "$INSTDIR\win32\cygwin"
-    File /r /x distribution.policy.s60 /x .hg ${WIN32SUPPORT}\cygwin\*.*
+    File /r /x distribution.policy.s60 /x .hg ${CYGWIN_LOCATION}\*.*
     SetOutPath "$INSTDIR\win32\mingw"
-    File /r /x distribution.policy.s60 /x .hg ${WIN32SUPPORT}\mingw\*.*
+    File /r /x distribution.policy.s60 /x .hg ${MINGW_LOCATION}\*.*
     SetOutPath "$INSTDIR\win32\python264"
-    File /r /x distribution.policy.s60 /x .hg ${WIN32SUPPORT}\python264\*.*
+    File /r /x distribution.policy.s60 /x .hg ${PYTHON_LOCATION}\*.*
     
     SetOutPath "$INSTDIR"
-    File ${RAPTOR_LOCATION}\RELEASE-NOTES.txt
+    File ${RAPTOR_LOCATION}\RELEASE-NOTES.html
+    SetOutPath "$INSTDIR\notes"
+    File /r /x distribution.policy.s60 ${RAPTOR_LOCATION}\notes\*.*
     
     
     ${Unless} $INSTALL_TYPE == "NO_ENV"
@@ -188,6 +188,7 @@
 	
 	# Generate batch file to set environment variables for Raptor
 	StrCpy $RESULT "@REM Environment variables for ${INSTALLER_NAME}$\r$\nset SBS_HOME=$INSTDIR$\r$\nset PATH=%SBS_HOME%\bin;%PATH%$\r$\n"
+	SetOutPath "$INSTDIR"
 	!insertmacro WriteFile "RaptorEnv.bat" "$RESULT"
 SectionEnd
 
@@ -334,7 +335,8 @@
     RmDir /r $INSTDIR\python
     RmDir /r $INSTDIR\schema
     RmDir /r $INSTDIR\win32
-    Delete $INSTDIR\RELEASE-NOTES.txt
+    Delete $INSTDIR\RELEASE-NOTES.html
+    RmDir /r $INSTDIR\notes
     Delete $INSTDIR\RaptorEnv.bat
     Delete $INSTDIR\${UNINSTALLER_FILENAME}
     
--- a/sbsv2/raptor/util/talon/talon.c	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/util/talon/talon.c	Fri Apr 16 19:32:39 2010 +0100
@@ -586,7 +586,7 @@
 
 				if (p->returncode != 0)
 				{
-					char *exitstr = retries > 0 ? "retry" : "failed";
+					char *exitstr = (force_success || retries <= 0) ? "failed" : "retry";
 					snprintf(status, STATUS_STRMAX - 1, "\n<status exit='%s' code='%d' attempt='%d'%s%s />", exitstr, p->returncode, attempt, flagsstr, reasonstr );
 				} else {
 					snprintf(status, STATUS_STRMAX - 1, "\n<status exit='ok' attempt='%d'%s%s />", attempt, flagsstr, reasonstr );
--- a/sbsv2/raptor/util/talon/tests/config.sh	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/util/talon/tests/config.sh	Fri Apr 16 19:32:39 2010 +0100
@@ -16,9 +16,19 @@
 #
 # set up the environment for some talon tests.
 
+eval `$SBS_HOME/bin/gethost.sh -e`
+
+if [[ "$HOSTPLATFORM" =~ "win" ]]; then
+TEST_SHELL=$(cygpath -w $SBS_HOME/win32/bin/talon.exe)
+TEST_TALON_SHELL=$(cygpath -w $SBS_CYGWIN/bin/bash.exe)
+else
+TEST_SHELL=$SBS_HOME/$HOSTPLATFORM_DIR/bin/talon
+TEST_TALON_SHELL=/bin/bash
+fi
+
 cat >settings.mk <<-endofsettings
-	SHELL:=$(cygpath -w $SBS_HOME/win32/bin/talon.exe)
-	TALON_SHELL:=$(cygpath -w $SBS_CYGWIN/bin/bash.exe)
+	SHELL:=$TEST_SHELL
+	TALON_SHELL:=$TEST_TALON_SHELL
 	TALON_BUILDID:=100
 	TALON_DEBUG:=""
 	export TALON_SHELL TALON_BUILDID TALON_DEBUG
--- a/sbsv2/raptor/util/talon/tests/t4.mk	Wed Apr 14 18:01:20 2010 +0100
+++ b/sbsv2/raptor/util/talon/tests/t4.mk	Fri Apr 16 19:32:39 2010 +0100
@@ -23,6 +23,11 @@
 $(info testing timeouts)
 $(info )
 
-all:
+.PHONY: all passed
+
+all: passed
+	@echo "t4-PASSED"
+
+passed:
 	@|PLATFORM=armv5;MMP=barney.mmp;BLDINF=somebld.inf;|echo "Started a slow command under talon (attempt $$TALON_ATTEMPT):";echo "SHELL=$$SHELL";if (( $$TALON_ATTEMPT <4 )); then echo sleeping 6; sleep 6; echo "hi"; else echo "Not sleeping this time"; fi; echo "this should not appear in the recipe tags unless you try 4 times."
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/util/talon/tests/t6.mk	Fri Apr 16 19:32:39 2010 +0100
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+include settings.mk
+
+# Making sure that forcesuccess works.
+
+TALON_RECIPEATTRIBUTES:=flags='$$TALON_FLAGS'
+TALON_RETRIES:=1
+
+export TALON_RECIPEATTRIBUTES TALON_RETRIES
+
+.PHONY: all fred
+
+all: fred
+	@echo "t6-PASSED"
+	
+fred:
+	|TALON_FLAGS=FORCESUCCESS;|echo "Forcesuccess'd command"; exit 1
+
+
Binary file sbsv2/raptor/win32/bin/talon.exe has changed
Binary file sbsv2/raptor/win32/bin/unhide_ci_refs.exe has changed