Merge in resource speedups fix
authortimothy.murphy@nokia.com
Wed, 07 Apr 2010 19:34:49 +0100
branchfix
changeset 468 27d111560672
parent 456 f9d258cee458 (diff)
parent 467 04060c70e4fc (current diff)
child 469 6af83cc4c38a
Merge in resource speedups
sbsv2/raptor/RELEASE-NOTES.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/RELEASE-NOTES.html	Wed Apr 07 19:34:49 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 : Makefile Parse Performance in Resource stage is poor. Large size of included dependency files is a factor. In --no-depend-generate mode, create dependency files which only refer to other rsg/mbg files that are yet to be built - store no other dependencies.</li>
+<li>Fix : don't generate multiple copies of the same resource just because there are several target paths. Generate it once and copy that to the different target paths.</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 07 18:36:36 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,867 +0,0 @@
-Release Notes for Symbian Build System v2
-
-next version
-Defect Fixes:
-
-- SF Bug 385 - Raptor doesn't handle spaces in tool directory
-- DPDEF143018 - Raptor doesn't handle spaces in GCCE installation directory correctly
-- DPDEF143101 - GCC-E isn't tested as part of the tool checking mechanism
-- DPDEF141195 - Raptor doesn't handle spaces in tool paths
-- SF Bug 2172 - [Raptor] Resource builds warn on encountering trigraph-like strings
-- SF Bug 2308 - [Raptor] PLUGIN3 TARGETTYPEs don't set resource output offsets correctly
-- Fix: in copylogfromannofile mode, ensure that the build id and duration are included in the log. 
-  These are not critical but are useful.
-- Fix: remove unnecessary empty lines in log output in copylogfromannofile mode. 
-- SF Bug 1939 - [Raptor] PAGED keyword in MMP files should imply byte pair compressed
-- DPDEF144648 - Raptor failed to build tools_deb objects under Windows XP 
-- SF Bug 2134 - [Raptor] Raptor does not pass overridden make variables into its makefiles
-- Fix: do not allow data to be paged implicitly
-- Fix: Makefile Parse Performance in Resource stage is poor. Large size of included dependency files is a factor. In --no-depend-generate mode, create dependency files which only refer to other rsg/mbg files that are yet to be built - store no other dependencies.
-- Fix: don't generate multiple copies of the same resource just because there are several target paths. Generate it once and copy that to the different target paths.
-
-
-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 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 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/bin/sbs.bat	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/bin/sbs_filter.bat	Wed Apr 07 19:34:49 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 07 18:36:36 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 07 18:36:36 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 07 18:36:36 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 07 18:36:36 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 07 18:36:36 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 07 18:36:36 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 07 18:36:36 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/gcce.xml	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/lib/config/gcce.xml	Wed Apr 07 19:34:49 2010 +0100
@@ -119,6 +119,7 @@
 		<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=""/>
 
--- a/sbsv2/raptor/lib/config/locations.xml	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/lib/config/locations.xml	Wed Apr 07 19:34:49 2010 +0100
@@ -102,7 +102,7 @@
 		<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'/>
--- a/sbsv2/raptor/lib/config/variants.xml	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/lib/config/variants.xml	Wed Apr 07 19:34:49 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'/>
@@ -122,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"/>
@@ -149,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"/>
@@ -179,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/flm/e32abiv2.flm	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/lib/flm/e32abiv2.flm	Wed Apr 07 19:34:49 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)' />))
 
@@ -1244,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/e32abiv2exe.flm	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/lib/flm/e32abiv2exe.flm	Wed Apr 07 19:34:49 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 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/lib/flm/e32abiv2stdexe.flm	Wed Apr 07 19:34:49 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/standard.xml	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/lib/flm/standard.xml	Wed Apr 07 19:34:49 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 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/lib/flm/tools.xml	Wed Apr 07 19:34:49 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 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/lib/flm/tools2common.flm	Wed Apr 07 19:34:49 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 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/lib/flm/tools2exe.flm	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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/mmpparser.py	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/python/mmpparser.py	Wed Apr 07 19:34:49 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/raptor_meta.py	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/python/raptor_meta.py	Wed Apr 07 19:34:49 2010 +0100
@@ -2989,7 +2989,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 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/python/raptor_version.py	Wed Apr 07 19:34:49 2010 +0100
@@ -16,7 +16,7 @@
 
 # replace CHANGESET with the Hg changeset for ANY release
 
-version=(2,12,5,"2010-03-18","symbian build system","CHANGESET")
+version=(2,13,0,"2010-03-31","symbian build system","CHANGESET")
 
 def numericversion():
 	"""Raptor version string"""
--- a/sbsv2/raptor/python/raptor_xml.py	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/python/raptor_xml.py	Wed Apr 07 19:34:49 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 07 18:36:36 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/config/arm.xml	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/test/config/arm.xml	Wed Apr 07 19:34:49 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'/>
--- a/sbsv2/raptor/test/run.bat	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/test/run.bat	Wed Apr 07 19:34:49 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
--- a/sbsv2/raptor/test/smoke_suite/featurevariants.py	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/featurevariants.py	Wed Apr 07 19:34:49 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
--- a/sbsv2/raptor/test/smoke_suite/mmp_keywords.py	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/mmp_keywords.py	Wed Apr 07 19:34:49 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/test_resources/bv/bv_test.xml	Wed Apr 07 18:36:36 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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/mmp/epocnestedexceptions/bld.inf	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 2010 +0100
@@ -0,0 +1,11 @@
+TARGET			test_mmp_epocnestedexceptions.exe
+TARGETTYPE		EXE
+
+LIBRARY			euser.lib
+
+SYSTEMINCLUDE   /epoc32/include
+
+SOURCE			test.cpp
+
+EPOCNESTEDEXCEPTIONS
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/BLD.INF	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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	Wed Apr 07 19:34:49 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;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tools2_cross_compilation.py	Wed Apr 07 19:34:49 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/util/install-windows/raptorinstallermaker.py	Wed Apr 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/util/install-windows/raptorinstallermaker.py	Wed Apr 07 19:34:49 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 07 18:36:36 2010 +0100
+++ b/sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi	Wed Apr 07 19:34:49 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}
     
Binary file sbsv2/raptor/win32/bin/unhide_ci_refs.exe has changed