# HG changeset patch # User jjkang # Date 1277285279 -28800 # Node ID 22486c9c7b151ce9b2f704f6bf380f4c5de07f2e # Parent 360bd6b351362446dbb9e0e4bac7c639a99a5f27 raptor v2.14.0 diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/RELEASE-NOTES.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/RELEASE-NOTES.html Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,919 @@ + + +Release Notes for Symbian Build System v2 + + + +

Release Notes for Symbian Build System v2

+ +

version 2.14.0

+ +

New Features

+ + +

Defect Fixes

+ + + +

version 2.13.0

+ +

New Features

+ + +

Defect Fixes

+ + + +
+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 <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.
+
+
+ + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/bin/depcrunch.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/bin/depcrunch.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,111 @@ +# +# 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: +# Minimise the dependencies in a C preprocessor dependency file to +# those that CPP could not find. Then add in an assumption about +# where to find them. Output is assumed to be relevant to only one target +# even if multiple dep files are analysed. +# + +import sys +from optparse import OptionParser +import re + +class NoTargetException(Exception): + pass + +def depcrunch(file,extensions,assume): + target_pattern = r"^\s*(\S+):\s+" + target_re = re.compile(target_pattern) + # Not the use of (?i) in the following expression. re.I seems to cause re.findall + # to not actually find all files matching the extension whereas (?i) provides + # case insensitivity at the right point and it works. Really don't understand this. + extension_pattern = r"\s([^/ \t]+\.((?i)" + "|".join([t for t in extensions]) + r"))\b" + extension_re = re.compile(extension_pattern) + + target = None + + deps = [] + + # Read through the dependencies. + for l in file: + l = l.replace("\\","/").rstrip("\n\r") + + # Look out for the target name if + # we have not found it yet + if not target: + t = target_re.match(l) + if t: + target = t.groups()[0] + + # Look for prerequisites matching the + # extensions. There may be one or more on + # the same line as the target name. + # Don't use re.I - somehow prevents + # all but one match in a line which may have several files + m = extension_re.findall(l) + if m: + deps.extend([d[0] for d in m]) + + if not target: + raise NoTargetException() + + if len(deps) > 0: + print "%s: \\" % target + for d in deps[:-1]: + print " %s \\" % (assume + "/" + d) + print " %s " % (assume + "/" + deps[-1]) + + + + +## Command Line Interface #################################################### + +parser = OptionParser(prog = "depcrunch", + usage = "%prog [-h | options] []") + +parser.add_option("-e", "--extensions", + action="store", dest="extensions", type='string', help="comma separated list of file extensions of missing files to keep in the crunched dep file.") + +parser.add_option("-a", "--assume", + action="store", dest="assume", type='string', help="when cpp reports missing dependencies, assume that they are in this directory") + +(options, args) = parser.parse_args() + + +if not options.extensions: + parser.error("you must specify a comma-separated list of file extensions with the -e option.") + sys.exit(1) + +if not options.assume: + parser.error("you must specify an 'assumed directory' for correcting missing dependencies with the -a option.") + sys.exit(1) + +depfilename="stdin" +if len(args) > 0: + depfilename=args[0] + file = open(depfilename,"r") +else: + file = sys.stdin +try: + depcrunch(file,options.extensions.split(","), options.assume) +except NoTargetException,e: + sys.stderr.write("Target name not found in dependency file\n"); + sys.exit(2) + + +if file != sys.stdin: + file.close() + +sys.exit(0) diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/bin/recipestats.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/bin/recipestats.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,176 @@ +#!/usr/bin/env python +# +# 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" +# 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: +# +# display summary information about recipes from raptor logs +# e.g. total times and so on. + +import time +import __future__ + + + + +class RecipeStats(object): + def __init__(self, name, count, time): + self.name=name + self.count=count + self.time=time + + def add(self, duration): + self.time += duration + +class BuildStats(object): + STAT_OK = 0 + + + def __init__(self): + self.stats = {} + self.failcount = 0 + self.failtime = 0.0 + self.failtypes = {} + self.retryfails = 0 + self.hosts = {} + + def add(self, starttime, duration, name, status, host, phase): + if status != BuildStats.STAT_OK: + self.failcount += 1 + if name in self.failtypes: + self.failtypes[name] += 1 + else: + self.failtypes[name] = 1 + + if status == 128: + self.retryfails += 1 + return + + if name in self.stats: + r = self.stats[name] + r.add(duration) + else: + self.stats[name] = RecipeStats(name,1,duration) + + hp=host + if hp in self.hosts: + self.hosts[hp] += 1 + else: + self.hosts[hp] = 1 + + def recipe_csv(self): + s = '"name", "time", "count"\n' + l = sorted(self.stats.values(), key= lambda r: r.time, reverse=True) + for r in l: + s += '"%s",%s,%d\n' % (r.name, str(r.time), r.count) + return s + + def hosts_csv(self): + s='"host","recipecount"\n' + hs = self.hosts + for h in sorted(hs.keys()): + s += '"%s",%d\n' % (h,hs[h]) + return s + + +import sys +import re +import os +from optparse import OptionParser # for parsing command line parameters + +def main(): + recipe_re = re.compile(".*Making.*?([^\.]+\.[^\.]+)") + + parser = OptionParser(prog = "recipestats", + usage = """%prog --help [-b] [-f ]""") + + parser.add_option("-b","--buildhosts",action="store_true",dest="buildhosts_flag", + help="Lists which build hosts were active in each invocation of the build engine and how many recipes ran on each.", default = False) + parser.add_option("-f","--logfile",action="store",dest="logfilename", help="Read from the file, not stdin", default = None) + + + (options, stuff) = parser.parse_args(sys.argv[1:]) + + if options.logfilename is None: + f = sys.stdin + else: + f = open(options.logfilename,"r") + + st = BuildStats() + + + alternating = 0 + start_time = 0.0 + + phase=None + for l in f: + l2 = l.rstrip("\n\r") + + rm = recipe_re.match(l2) + + if rm is not None: + (rname,host) = rm.groups() + continue + + pm = phase_re.match(l2) + + if pm is not None: + if phase is not None: + if options.buildhosts_flag: + print('"%s"\n' % phase) + print(st.hosts_csv()) + st.hosts = {} + phase = pm.groups()[0] + continue + + tm = time_re.match(l2) + if tm is not None: + try: + s = float(tm.groups()[0]) + elapsed = float(tm.groups()[1]) + + if start_time == 0.0: + start_time = s + + s -= start_time + + continue + except ValueError, e: + raise Exception("Parse problem: float conversion on these groups: %s\n%s" %(str(tm.groups()), str(e))) + else: + if l2.find(" 1: + print "usage:", sys.argv[0], "(The log data is read from stdin)" + sys.exit(0) + +whatlogRE = re.compile(" repeat + if source == otherSource and bldinf != otherBldinf: + # only interested in the number for now + repeats += 1 + + # different source but same destination => conflict + if source != otherSource: + conflict = (source, destination, bldinf, otherSource, otherBldinf) + tcilfnoc = (otherSource, destination, otherBldinf, source, bldinf) + + if conflict in conflicts or tcilfnoc in conflicts: + # seen this conflict before + pass + else: + print "CONFLICT:", destination, \ + "FROM", source, \ + "IN", bldinf, \ + "AND FROM", otherSource, \ + "IN", otherBldinf + conflicts.append(conflict) + else: + sources[source] = [destination, bldinf] + destinations[destination] = [source, bldinf] + +# now check for destinations which were also sources => chains +for destination in destinations: + if destination in sources: + (nextDestination, inf2) = sources[destination] + (source, inf1) = destinations[destination] + print "CHAIN:", source, \ + "TO", destination, \ + "IN", inf1, \ + "THEN TO", nextDestination, \ + "IN", inf2 + chains += 1 + +# print a summary +print "Total exports = ", len(destinations.keys()) +print "Chained exports = ", chains +print "Repeated exports = ", repeats +print "Conflicting exports = ", len(conflicts) + +# return the error code +if conflicts: + sys.exit(1) +sys.exit(0) + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/bin/sbs_env.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/bin/sbs_env.bat Wed Jun 23 17:27:59 2010 +0800 @@ -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 + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/bin/sbs_filter --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/bin/sbs_filter Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,91 @@ +#!/bin/bash +# 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: +# raptor script +# add mingw to the PATH if we are running Cygwin on Windows +# + +# If SBS_HOME is not set in the environment then work it out +# from the path to this batch file +if [ -z "$SBS_HOME" ] ; then + temp=$0 + SBS_HOME=$(cd ${temp%/*} && echo $PWD) + export SBS_HOME=${SBS_HOME%/bin} +fi + +# Ensure that the host type is set for Raptor: +eval $($SBS_HOME/bin/gethost.sh -e) + +if [ -z "$HOSTPLATFORM" ]; then + echo "Error: HOSTPLATFORM could not be determined." 1>&2 + exit 1 +fi + +if [ ! -d "$SBS_HOME/$HOSTPLATFORM_DIR" ]; then +cat 1>&2 <&2 + echo "Check your SBS_HOME environment variable." 1>&2 +fi + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/bin/sbs_filter.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/bin/sbs_filter.bat Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,24 @@ +@rem +@rem Copyright (c) 2005-2009 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 + +@SETLOCAL +@CALL "%~dp0\sbs_env.bat" + +@REM Run with all the arguments. +@bash %SBS_HOME%\bin\sbs_filter %* + +@ENDLOCAL +@cmd /c exit /b %ERRORLEVEL% diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/bin/sbs_filter.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/bin/sbs_filter.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,88 @@ +#!/usr/bin/python + +# 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: +# + +import os +import sys +import traceback + +# intercept the -h option +if "-h" in sys.argv or "--help" in sys.argv: + print "usage:", sys.argv[0], "[sbs options]" + print " The log data is read from stdin." + print " Type 'sbs -h' for a list of sbs options." + sys.exit(0) + +# get the absolute path to this script +script = os.path.abspath(sys.argv[0]) + +# add the Raptor python directory to the PYTHONPATH +sys.path.append(os.path.join(os.path.dirname(script), "..", "python")) + +# now we should be able to find the raptor modules +import raptor +import pluginbox + +# make sure that HOSTPLATFORM is set +if not "HOSTPLATFORM" in os.environ: + sys.stderr.write("HOSTPLATFORM is not set ... try running gethost.sh\n") + sys.exit(1) + +if not "HOSTPLATFORM_DIR" in os.environ: + sys.stderr.write("HOSTPLATFORM_DIR is not set ... try running gethost.sh\n") + sys.exit(1) + +# construct a Raptor object from our command-line (less the name of this script) +the_raptor = raptor.Raptor.CreateCommandlineBuild(sys.argv[1:]) + +# from Raptor.OpenLog() +try: + # Find all the raptor plugins and put them into a pluginbox. + if not the_raptor.systemPlugins.isAbsolute(): + the_raptor.systemPlugins = the_raptor.home.Append(the_raptor.systemPlugins) + + pbox = pluginbox.PluginBox(str(the_raptor.systemPlugins)) + raptor_params = raptor.BuildStats(the_raptor) + + # Open the requested plugins using the pluginbox + the_raptor.out.open(raptor_params, the_raptor.filterList, pbox) + +except Exception, e: + sys.stderr.write("error: problem while creating filters %s\n" % str(e)) + traceback.print_exc() + sys.exit(1) + +# read stdin a line at a time and pass it to the Raptor object +try: + line = " " + while line: + line = sys.stdin.readline() + the_raptor.out.write(line) +except Exception,e: + sys.stderr.write("error: problem while filtering: %s\n" % str(e)) + traceback.print_exc() + sys.exit(1) + + +# Print the summary (this can't return errors) +the_raptor.out.summary() + +if not the_raptor.out.close(): + the_raptor.errorCode = 2 + +# return the error code +sys.exit(the_raptor.errorCode) + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/bin/timelines.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/bin/timelines.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,224 @@ +# +# 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: +# +# Raptor log visualisation program. Takes a raptor log as standard input +# and displays timelines that represent build progress and +# how much actual parallelism there is in the build. +# This program requires the pygame and PyOpenGL modules. + +from OpenGL.GL import * +from OpenGL.GLU import * +import pygame +from pygame.locals import * +import time + +class Timeline(object): + """A bar representing a number of recipes which were executed in + time sequence. There is no guarantee about what host but in + theory they could have been executed on the same host.""" + + globalmax = 2.0 + + def __init__(self,ylevel): + self.maxtime = 0.0 + self.recipes = [] + self.ylevel = ylevel + + def append(self, recipe): + "" add this recipe to this timeline if it happens after the latest recipe already in the timeline "" + if recipe.starttime + recipe.duration > self.maxtime: + self.maxtime = recipe.starttime + recipe.duration + if self.maxtime > Timeline.globalmax: + Timeline.globalmax = self.maxtime + else: + pass + + self.recipes.append(recipe) + + def draw(self): + glLoadIdentity() + self.xscale = 4.0 / Timeline.globalmax + + glTranslatef(-2.0, -1.5, -6.0) + count = 0 + for r in self.recipes: + if count % 2 == 0: + coloff=0.8 + else: + coloff = 1.0 + + count += 1 + r.draw(self.xscale, self.ylevel, coloff) + +class Recipe(object): + """Represents a task completed in a raptor build. + Drawn as a colour-coded bar with different + colours for the various recipe types.""" + STAT_OK = 0 + colours = { + 'compile': (0.5,0.5,1.0), + 'compile2object': (0.5,0.5,1.0), + 'win32compile2object': (0.5,0.5,1.0), + 'tools2linkexe': (0.5,1.0,0.5), + 'link': (0.5,1.0,0.5), + 'linkandpostlink': (0.5,1.0,0.5), + 'win32stageonelink': (0.5,1.0,0.5), + 'tools2lib': (0.5,1.0,1.0), + 'win32stagetwolink': (1.0,0.1,1.0), + 'postlink': (1.0,0.5,1.0) + } + + def __init__(self, starttime, duration, name, status): + self.starttime = starttime + self.duration = duration + self.status = status + self.colour = (1.0, 1.0, 1.0) + if name in Recipe.colours: + self.colour = Recipe.colours[name] + else: + self.colour = (1.0,1.0,1.0) + self.name = name + + def draw(self, scale, ylevel, coloff): + if self.status == Recipe.STAT_OK: + glColor4f(self.colour[0]*coloff, self.colour[1]*coloff, self.colour[2]*coloff,0.2) + else: + glColor4f(1.0*coloff, 0.6*coloff, 0.6*coloff,0.2) + + + x = self.starttime * scale + y = ylevel + x2 = x + self.duration * scale + y2 = ylevel + 0.2 + glBegin(GL_QUADS) + glVertex3f(x, y, 0) + glVertex3f(x, y2, 0) + glVertex3f(x2, y2, 0) + glVertex3f(x2, y, 0) + glEnd() + + +def resize((width, height)): + if height==0: + height=1 + glViewport(0, 0, width, height) + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + gluPerspective(45, 1.0*width/height, 0.1, 100.0) + glMatrixMode(GL_MODELVIEW) + glLoadIdentity() + +def init(): + glShadeModel(GL_SMOOTH) + glClearColor(0.0, 0.0, 0.0, 0.0) + glClearDepth(1.0) + glEnable(GL_DEPTH_TEST) + glDepthFunc(GL_LEQUAL) + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST) + + +import sys +import re + +def main(): + + video_flags = OPENGL|DOUBLEBUF + + pygame.init() + pygame.display.set_mode((800,600), video_flags) + + resize((800,600)) + init() + + frames = 0 + ticks = pygame.time.get_ticks() + + + lines = 4 + timelines = [] + ylevel = 0.0 + for i in xrange(0,4): + ylevel += 0.6 + timelines.append(Timeline(ylevel)) + + f = sys.stdin + + recipe_re = re.compile(".* newdiff: + dest_timeline = t + olddiff = newdiff + tnum += 1 + + dest_timeline.append(Recipe(s, elapsed, rname, status)) + event = pygame.event.poll() + if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): + break + + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) + for t in timelines: + t.draw() + pygame.display.flip() + + frames = frames+1 + + print "fps: %de" % ((frames*1000)/(pygame.time.get_ticks()-ticks)) + event = pygame.event.wait() + + +if __name__ == '__main__': main() diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/lib/flm/e32abiv2pdll.flm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/lib/flm/e32abiv2pdll.flm Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,61 @@ +# 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: +# ARMv5 PDLL ABIv2 Function Like Makefile (FLM) +# Build an e32 PDLL (Patchable constants DLL) +# +# + +ifeq ($(TARGETTYPE),pdll) +include $(FLMHOME)/e32abiv2defaults.mk + +# What we need to build a DLL +ifeq ($(NOEXPORTLIBRARY),) +IMPORTLIBRARYREQUIRED:=1 +endif +POSTLINKDEFFILE:=$(DEFFILE) +SUPPORT_FREEZE:=1 + +# Default Linker settings for this target type +LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib +LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION)=_E32Dll $(LINKER_ENTRYPOINT_DECORATION)$(LINKER_SEPARATOR)$(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT)) + +ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True") +LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP) +endif + +LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib +STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB) + + +# Default Postlinker settings +CANHAVEEXPORTS:=1 +POSTLINKTARGETTYPE:=DLL +POSTLINKFILETYPE:=dll +DOPOSTLINK:=1 +CANIGNORENONCALLABLE:=1 + +# Use the general EABI FLM +# We are appending to CDEFS but we don't want this to affect +# other invocations so we are going to save it on a stack +# and restore it afterwards +$(call vsave,CDEFS) +CDEFS:=$(CDEFS) __DLL__ +include $(FLMHOME)/e32abiv2.flm +$(call vrestore) + +else +$(error e32abiv2pdll.flm called with wrong TARGETTYPE (should be 'pdll' but is '$(TARGETTYPE)')) +endif + + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/lib/flm/run.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/lib/flm/run.mk Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,39 @@ +.PHONY:: ALL +ALL:: # Default target + +HOSTPLATFORM:=win 32 +HOSTPLATFORM_DIR:=win32 +OSTYPE:=cygwin +FLMHOME:=E:/wip2/lib/flm +SHELL:=E:/wip2/win32/cygwin/bin/sh.exe + + +USE_TALON:= + + + +include E:/wip2/lib/flm/globals.mk + +# dynamic default targets + +# call E:/wip2/lib/flm/config/default.flm +SBS_SPECIFICATION:=Symbian.config.default +SBS_CONFIGURATION:=armv5_urel + +EPOCROOT:=E:/wip2/test/epocroot +ELF2E32:=E:/wip2/test/epocroot/epoc32/tools/elf2e32.exe +WHATLOG:= +include E:/wip2/lib/flm/config/default.flm + + +component_paths:=$(SBS_HOME)/test/smoke_suite/test_resources/simple/bld.inf|c:/make_test/a.mk \ +$(SBS_HOME)/test/smoke_suite/test_resources/simple_dll/bld.inf|c:/make_test/b.mk \ +$(SBS_HOME)/test/smoke_suite/test_resources/simple/always_build_as_arm_bld.inf|c:/make_test/c.mk \ +$(SBS_HOME)/test/smoke_suite/test_resources/simple/debuggable_bld.inf|c:/make_test/d.mk \ +$(SBS_HOME)/test/smoke_suite/test_resources/simple_export/bld.inf|c:/make_test/e.mk + +configs:=armv5 armv7 + +cli_options:=-d + +include build.flm diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/lib/flm/win32pdll.flm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/lib/flm/win32pdll.flm Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,34 @@ +# 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: +# WINSCW PDLL Function Like Makefile (FLM) +# Build an emulator PDLL +# +# + +ifeq ($(TARGETTYPE),pdll) + +BASE_TYPE:=dll +CW_STATIC_RUNTIME:=1 +FIRST_STATLIB:= +FIXED_EXPORT:= +SUPPORTS_IMPORT_LIBRARY:=1 +SYSTEM_TARGET:=0 +UID2_DEFAULT:= + +# Use the general win32 FLM +include $(FLMHOME)/win32.flm + +else +$(error $winp32dll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)')) +endif diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/license.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/license.txt Wed Jun 23 17:27:59 2010 +0800 @@ -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". + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/notes/abiv1_implibs.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/notes/abiv1_implibs.txt Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,14 @@ + +The ABIv1 toolchain was deprecated in Symbian OS 9.4 but the build system +continued to generate both ABIv1 (.lib) import libraries and ABIv2 (.dso) +import libraries for convenience during the transition to ABIv2. + +This change now turns off the generation of ABIv1 import libraries by +default but makes support switchable on a kit-by-kit basis. To turn on +ABIv1 import library generation, add the following setting to the +root.changes variant in epoc32/sbs_config/os_properties.xml + + + +An example properties file is available in the examples/os_properties.xml +file distributed within the Raptor installation. diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/notes/cross_compiling_tools.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/notes/cross_compiling_tools.txt Wed Jun 23 17:27:59 2010 +0800 @@ -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. + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/notes/cygwin_1_7.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/notes/cygwin_1_7.txt Wed Jun 23 17:27:59 2010 +0800 @@ -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. diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/notes/delete_on_failed_compile.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/notes/delete_on_failed_compile.txt Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,7 @@ +In certain circumstances, such as failure to obtain licenses, RVCT 2.2's armcc +program still produces object files whose contents is junk. This causes build +problems later as from Make's point of view those object files are "up to +date" so the build tries to link them. Of course, these attempts at linking +fail and the build is broken. + +This is a work around for that RVCT 2.2 problem. diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/notes/epocnestedexceptions.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/notes/epocnestedexceptions.txt Wed Jun 23 17:27:59 2010 +0800 @@ -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. + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/notes/featurevariantsafe.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/notes/featurevariantsafe.txt Wed Jun 23 17:27:59 2010 +0800 @@ -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. + + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/notes/localresourcecopying.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/notes/localresourcecopying.txt Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,24 @@ +Resources were copied using make rules. This is sensible in local +machine builds but non-optimal in cluster builds. It is entirely IO +bound so that instead of benefitting from running on the cluster it +simply creates more IO as files need to be transferred over the network, +possibly multiple times. + +This change introduces the tag to the log which the frontend +reads in a new "default" filter called FilterCopyFile. Thus the python +frontend does the copying rather than the cluster build engine. + +This happens at the end of each invocation of the build engine or "stage". +Since resources are built in their own stage, the copying is completed +before build tasks in the other stages require them. The copied files +are not needed in the resource stage itself. + +The filter uses tags to determine when a stage +is finished and this requires that the timing feature be switched on +permanently. + +The format of the tag is: +dest_filename1 dest_filename2 ... + +Spaces may not be used in filenames. The sequence "%20" may be used +instead. diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/notes/parametric_log_filters.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/notes/parametric_log_filters.txt Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,31 @@ + +It is now possible to pass parameters from the command line into log filters. +This works in the same way for both sbs and sbs_filter commands. + +For example: + +sbs --filters=Foo[param1,param2,param3] + +sbs_filter --filters=Bar[value] < build.log + + +Multiple filters with parameters can be specified if needed, + +sbs --filters=Foo[param1,param2,param3],Bar[value] + + +In the 2.13.0 release there are two filters which take parameters: + +1. sbs_filter --filters=FilterComp[wizard/group] < log + +Here the parameter is (part of) a bld.inf path and the filter only prints +parts of the log which are attributable to the matching component. In the +example above, the log elements from any bld.inf which has "wizard/group" +as part of its path will be printed: normally, passing the full path name +will guarantee that only one component matches. + +2. sbs_filter --filters=FilterTagCounter[info,recipe] < log + +Here the parameters are a list of the element names to count. This is a +simple analysis filter that shows you how many instances of XMl elements +are in a log and how many characters of body text they have. \ No newline at end of file diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/notes/query_cli.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/notes/query_cli.txt Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,18 @@ + +A new --query command-line option allows other tools to easily read raptor's +configuration data without having to understand exactly how raptor config +files work. + +For example, all the valid build aliases which can be used to build with +the -c option can be obtained using: + +sbs --query=aliases + +All the known product variants can be obtained using: + +sbs --query=products + +And the details of a particular configuration can be found using: + +sbs --query=config[armv5_urel.n8] + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/notes/system_definition_v3.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/notes/system_definition_v3.txt Wed Jun 23 17:27:59 2010 +0800 @@ -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. + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/notes/tcomsupport.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/notes/tcomsupport.txt Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,42 @@ +New Trace Compiler +------------------- + +Raptor supports an updated version of the Trace Compiler which has +an improved command-line interface that allows Raptor to specify the +directory in which trace data should be written. This allows MMPs to +implement a new convention for where trace files are stored. + +The new convention prevents clashes where building the same +source file for different MMPs would previously have resulted in two +build tasks trying to create the same trace file (header/dictionary). +This caused build slowdowns and also made the trace data inaccurate. + +The standard for this directory is that the last two elements of the +path should be + + traces/traces__ + +e.g. + + traces/traces_euser_dll + +The new trace compiler also creates "autogen" headers in a new location +under epoc32/include/platform rather than epoc32/include/internal. + +Trace Headers Directory can now also be in SYSTEMINCLUDEs +---------------------------------------------------------- + +Some teams were having trouble getting qmake to generate MMPs with +USERINCLUDEs set. So they were specifying the trace header directory in +their SYTEMINCLUDEs. This change causes Raptor to look for the traces +directory in bot SYSTEMINCLUDES and USERINCLUDES. + + +Create Trace Directories During Makefile Parse +----------------------------------------------- + +Some build engines consider it a "clash" when two jobs attempt to make the +same directory. This change causes some important trace output directories +to be created during makefile parsing which removes the (small) possibility +that they would clash during the build part. + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/python/plugins/filter_broken.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/plugins/filter_broken.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,48 @@ +# +# 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: +# Example of a Filter class using the SAX parser base class +# + +import filter_interface + +class FilterBroken(filter_interface.FilterSAX): + + def startDocument(self): + self.first = True + + def startElement(self, name, attributes): + pass + + def characters(self, char): + pass + + def endElement(self, name): + pass + + def endDocument(self): + pass + + def error(self, exception): + pass + + def fatalError(self, exception): + if self.first: + print "fatal error:", str(exception) + self.first = False + + def warning(self, exception): + pass + +# the end diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/python/plugins/filter_bz2log.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/plugins/filter_bz2log.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,88 @@ +# 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: +# Compress the full Raptor log file using the BZip2 algorithm, maximum compression. +# +# + +import os +import sys +import raptor +import filter_interface +import bz2 + +class StringListCompressor(object): + def __init__(self, complevel=5, filename="file.log.bz2"): + self.compressor = bz2.BZ2Compressor(complevel) + self.stringlist = [] + self.outputopenedok = False + self.filename = filename + try: + self.fh = open(self.filename, "wb") + self.outputopenedok = True + except: + self.outputopenedok = False + + def write(self, data): + if self.outputopenedok: + compresseddata = self.compressor.compress(data) + self.fh.write(compresseddata) + + def __del__(self): + if self.outputopenedok: + compresseddata = self.compressor.flush() + self.fh.write(compresseddata) + self.fh.close() + +class Bz2log(filter_interface.Filter): + def __init__(self): + self.__inRecipe = False + self.compressor = None + + def open(self, raptor_instance): + """Open a log file for the various I/O methods to write to.""" + + if raptor_instance.logFileName == None: + self.out = sys.stdout # Default to stdout if no log file is given + else: + logname = str(raptor_instance.logFileName.path.replace("%TIME", raptor_instance.timestring)) + + # Ensure that filename has the right extension; append ".bz2" if required + if not logname.lower().endswith(".bz2"): + logname += ".bz2" + + try: + dirname = str(raptor_instance.logFileName.Dir()) + if dirname and not os.path.isdir(dirname): + os.makedirs(dirname) + except: + self.formatError("cannot create directory %s", dirname) + return False + + # Use highest compression level 9 which corresponds to a 900KB dictionary + self.compressor = StringListCompressor(9, logname) + if not self.compressor.outputopenedok: + self.out = None + self.formatError("failed to initialise compression routines." ) + return False + return True + + def write(self, data): + """Write data compressed log""" + if self.compressor: + self.compressor.write(data) + return True + + def close(self): + """Close the log file""" + return True diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/python/plugins/filter_check.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/plugins/filter_check.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,30 @@ +# +# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# Filter class for doing --what and --check operations +# + +import os +import sys +import re +import filter_interface +import filter_what + +class FilterCheck(filter_what.FilterWhat): + + def __init__(self): + super(filter_what.FilterWhat,self).__init__() + self.check = True + self.path_prefix_to_strip = None + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/python/plugins/filter_checkcomp.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/plugins/filter_checkcomp.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,70 @@ +# +# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# Filter class for doing a Check operation but also prints component information. +# + +import os +import sys +import re +import filter_interface +import filter_what + +class FilterCheckComp(filter_what.FilterWhat): + + def __init__(self): + super(FilterCheckComp, self).__init__() + self.check = True + + def write(self, text): + "process some log text" + ok = True + + for line in text.splitlines(): + ok = filter_what.FilterWhat.write(self, line) + if not ok: + break + self.ok = ok + return self.ok + + def start_bldinf(self, bldinf): + dir = None + if "win" in self.buildparameters.platform: + dir = os.path.dirname(bldinf.replace("/","\\")) + dir = os.path.splitdrive(dir)[1] + else: + dir = os.path.dirname(bldinf) + + self.outfile.write("=== %s == %s\n" % (dir, dir)) + self.outfile.write("=== check == %s\n" % (dir)) + self.outfile.write("-- sbs_filter --filters=FilterCheckComp\n++ Started at Thu Feb 11 10:05:19 2010\nChdir %s\n" % dir) + + def end_bldinf(self): + self.outfile.write("++ Finished at Thu Feb 11 10:05:20 2010\n") + + def close(self): + self.outfile.write("++ Finished at Thu Feb 11 10:05:20 2010\n") + self.outfile.write("=== check finished Thu Feb 11 10:05:20 2010\n") + + def open(self, build_parameters): + t = filter_what.FilterWhat.open(self, build_parameters) + if t: + self.outfile.write("\n===-------------------------------------------------\n") + self.outfile.write("=== check\n") + self.outfile.write("===-------------------------------------------------\n") + self.outfile.write("=== check started Thu Feb 11 10:02:21 2010\n") + + self.path_prefix_to_strip = os.path.abspath(build_parameters.epocroot) + self.path_prefix_to_add_on = build_parameters.incoming_epocroot + return t diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/python/plugins/filter_component.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/plugins/filter_component.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,96 @@ +# +# 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: +# Filter class to print log entries for a selected component +# + +import filter_interface +import sys + +class FilterComp(filter_interface.FilterSAX): + + def __init__(self, params = []): + """parameters to this filter are the path of the bld.inf and some flags. + + The bld.inf path can be a substring of the path to match. For example, + "email" will match an element with bldinf="y:/src/email/group/bld.inf". + + No flags are supported yet; this is for future expansion. + + If no parameters are passed then nothing is printed.""" + self.bldinf = "" + self.flags = "" + + if len(params) > 0: + self.bldinf = params[0] + + if len(params) > 1: + self.flags = params[1] + + super(FilterComp, self).__init__() + + def startDocument(self): + # mark when we are inside an element with bldinf="the selected one" + self.inside = False + # and count nested elements so we can toggle off at the end. + self.nesting = 0 + + def printElementStart(self, name, attributes): + sys.stdout.write("<" + name) + for att,val in attributes.items(): + sys.stdout.write(" " + att + "='" + val + "'") + sys.stdout.write(">") + + def startElement(self, name, attributes): + if self.inside: + self.nesting += 1 + self.printElementStart(name, attributes) + return + + if self.bldinf: + try: + if self.bldinf in attributes["bldinf"]: + self.inside = True + self.nesting = 1 + self.printElementStart(name, attributes) + except KeyError: + pass + + def characters(self, char): + if self.inside: + sys.stdout.write(char) + + def endElement(self, name): + if self.inside: + sys.stdout.write("") + + self.nesting -= 1 + + if self.nesting == 0: + self.inside = False + print + + def endDocument(self): + pass + + def error(self, exception): + print filter_interface.Filter.formatError("FilterComp:" + str(exception)) + + def fatalError(self, exception): + print filter_interface.Filter.formatError("FilterComp:" + str(exception)) + + def warning(self, exception): + print filter_interface.Filter.formatWarning("FilterComp:" + str(exception)) + +# the end diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/python/plugins/filter_copyfile.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/plugins/filter_copyfile.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,92 @@ +# +# Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# 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: +# Filter class for copying files in serial in python. This +# is important in cluster builds where file copying is +# very inefficient. +# The one-to-many tag is searched for and copy +# instructions are built up in a hash table. +# destfilename1 destfilename2 . . . .destfilenameN +# destinations must be full filenames not directories. +# +# This filter monitors build progress +# via the tags and flushes copies as build +# stages end (e.g. after resource so resources are ready for the next stage) +# + +import os +import sys +import tempfile +import filter_interface +import shutil +import generic_path +import stat +from raptor_utilities import copyfile + +class FilterCopyFile(filter_interface.Filter): + + def open(self, params): + "initialise" + + self.ok = True + + self.files = {} + + return self.ok + + + def write(self, text): + "process some log text" + + for line in text.splitlines(): + if line.startswith("",source_start)+1:line.find("")].split(" ") + + if source in self.files: + self.files[source].update(destinations) + else: + self.files[source] = set(destinations) + elif line.startswith("%s" % str(e) + self.files = {} + + + + def close(self): + "nop" + + + return self.ok + +# the end + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/python/plugins/filter_tagcount.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/plugins/filter_tagcount.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,82 @@ +# +# Copyright (c) 2008-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: +# Example of a Filter class using the SAX parser base class +# + +import filter_interface + +class FilterTagCounter(filter_interface.FilterSAX): + + def __init__(self, params = []): + """parameters to this filter are the names of tags to print. + + If no parameters are passed then all tags are reported.""" + self.interesting = params + super(FilterTagCounter, self).__init__() + + def startDocument(self): + # for each element name count the number of occurences + # and the amount of body text contained. + self.names = [] + self.count = {} + self.errors = 0 + self.fatals = 0 + self.warns = 0 + + def startElement(self, name, attributes): + if name == "buildlog": + # print out the attributes of the "top" element + print "version:" + for a,v in attributes.items(): + print a, "=", v + + # push name onto the stack of names and increment the count + self.names.append(name) + if name in self.count: + self.count[name][0] += 1 + else: + self.count[name] = [1, 0] # occurs, characters + + def characters(self, char): + # these are for the current element + current = self.names[-1] + self.count[current][1] += len(char) + + def endElement(self, name): + # pop the name off the stack + self.names.pop() + + def endDocument(self): + # report + print "\nsummary:" + for name,nos in sorted(self.count.items()): + if name in self.interesting or len(self.interesting) == 0: + print name, nos[0], nos[1] + + print "\nparsing:" + print "errors =", self.errors + print "fatals =", self.fatals + print "warnings =", self.warns + + def error(self, exception): + self.errors += 1 + + def fatalError(self, exception): + self.fatals += 1 + + def warning(self, exception): + self.warns += 1 + +# the end diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/python/plugins/filter_timing.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/plugins/filter_timing.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,121 @@ +# +# 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: +# Base Class for defining filter classes +# All filter classes that get defined should derive from this base class +# + +import errno +import filter_interface +import os +import raptor +import raptor_timing +import sys + +class FilterTiming(filter_interface.Filter): + """ + Writes a logfile containing the timings for each Raptor process + """ + + def open(self, raptor_instance): + """ + Open a log file with the same name as the Raptor log file, with + '.timings' appended. This will contain only 'progress' + timing tags from the Raptor output + Parameters: + raptor_instance - Raptor + Instance of Raptor. FilterList usually passes in a cut-down + version of Raptor containing only a few attributes + """ + self.raptor = raptor_instance + self.logFileName = self.raptor.logFileName + # insert the time into the log file name + if self.logFileName: + self.path = (self.logFileName.path.replace("%TIME", + self.raptor.timestring) + ".timings") + + try: + dirname = str(self.raptor.logFileName.Dir()) + if dirname and not os.path.isdir(dirname): + os.makedirs(dirname) + except os.error, e: + if e.errno != errno.EEXIST: + sys.stderr.write("%s : error: cannot create directory " + + "%s\n" % (raptor.name, dirname)) + return False + try: + self.out = open(str(self.path), "w") + except: + self.out = None + sys.stderr.write("%s : error: cannot write log %s\n" %\ + (raptor.name, self.path)) + return False + self.start_times = {} + self.all_durations = [] + self.namespace_written = False + self.open_written = False + return True + + + def write(self, text): + """ + Write out any tags with a 'progress_' tagName + """ + if "\n") + + + def close(self): + """ + Close the logfile + """ + try: + self.out.close + return True + except: + self.out = None + return False diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/python/plugins/filter_whatcomp.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/plugins/filter_whatcomp.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,56 @@ +# +# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# Filter class for doing --what and --check operations +# + +import os +import sys +import re +import filter_interface +import filter_what + +class FilterWhatComp(filter_what.FilterWhat): + + def __init__(self): + super(FilterWhatComp, self).__init__() + + def write(self, text): + "process some log text" + ok = True + + for line in text.splitlines(): + ok = filter_what.FilterWhat.write(self, line) + if not ok: + break + + self.ok = ok + return self.ok + + def start_bldinf(self,bldinf): + if "win" in self.buildparameters.platform: + dir = os.path.dirname(bldinf.replace("/","\\")) + else: + dir = os.path.dirname(bldinf) + + self.outfile.write("-- abld -w \nChdir %s \n" % dir) + + def end_bldinf(self): + self.outfile.write("++ Finished\n") + + def open(self, build_parameters): + t = filter_what.FilterWhat.open(self, build_parameters) + self.path_prefix_to_strip = os.path.abspath(build_parameters.epocroot) + self.path_prefix_to_add_on = build_parameters.incoming_epocroot + return t diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/python/raptor_api.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/raptor_api.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,221 @@ +# +# 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: +# +# raptor_api module +# +# Python API for Raptor. External code should interact with Raptor via this +# module only, as it is the only programatic interface considered public. The +# command line --query option is also implemented using this module. + +# constants +ALL = 1 + +# objects + +class Reply(object): + """object to return values from API calls. + """ + def __init__(self, text=""): + self.text = text + + def __str__(self): + name = type(self).__name__.lower() + + string = "<" + name + children = [] + longend = False + + for attribute,value in self.__dict__.items(): + if attribute != "text": + if isinstance(value, Reply): + children.append(value) + else: + string += " %s='%s'" % (attribute, value) + + if children or self.text: + string += ">" + longend = True + + if self.text: + string += self.text + + if children: + string += "\n" + + for c in children: + string += str(c) + + if longend: + string += "\n" % name + else: + string += "/>\n" + + return string + +class Alias(Reply): + def __init__(self, name, meaning): + super(Alias,self).__init__() + self.name = name + self.meaning = meaning + +class Config(Reply): + def __init__(self, fullname, outputpath): + super(Config,self).__init__() + self.fullname = fullname + self.outputpath = outputpath + +class Product(Reply): + def __init__(self, name): + super(Product,self).__init__() + self.name = name + +import generic_path +import raptor +import raptor_data +import re + +class Context(object): + """object to contain state information for API calls. + + For example, + + api = raptor_api.Context() + val = api.getaliases("X") + """ + def __init__(self, initialiser=None): + # this object has a private Raptor object that can either be + # passed in or created internally. + + if initialiser == None: + self.__raptor = raptor.Raptor() + else: + self.__raptor = initialiser + + def stringquery(self, query): + """turn a string into an API call and execute it. + + This is a convenience method for "lazy" callers. + + The return value is also converted into a well-formed XML string. + """ + + if query == "aliases": + aliases = self.getaliases() + return "".join(map(str, aliases)).strip() + + elif query == "products": + variants = self.getproducts() + return "".join(map(str, variants)).strip() + + elif query.startswith("config"): + match = re.match("config\[(.*)\]", query) + if match: + config = self.getconfig(match.group(1)) + return str(config).strip() + else: + raise BadQuery("syntax error") + + raise BadQuery("unknown query") + + def getaliases(self, type=""): + """extract all aliases of a given type. + + the default type is "". + to get all aliases pass type=ALL + """ + aliases = [] + + for a in self.__raptor.cache.aliases.values(): + if type == ALL or a.type == type: + # copy the members we want to expose + aliases.append( Alias(a.name, a.meaning) ) + + return aliases + + def getconfig(self, name): + """extract the values for a given configuration. + + 'name' should be an alias or variant followed optionally by a + dot-separated list of variants. For example "armv5_urel" or + "armv5_urel.savespace.vasco". + """ + names = name.split(".") + if names[0] in self.__raptor.cache.aliases: + x = self.__raptor.cache.FindNamedAlias(names[0]) + + if len(names) > 1: + fullname = x.meaning + "." + ".".join(names[1:]) + else: + fullname = x.meaning + + elif names[0] in self.__raptor.cache.variants: + fullname = name + + else: + raise BadQuery("'%s' is not an alias or a variant" % names[0]) + + # create an evaluator for the named configuration + tmp = raptor_data.Alias("tmp") + tmp.SetProperty("meaning", fullname) + + units = tmp.GenerateBuildUnits(self.__raptor.cache) + evaluator = self.__raptor.GetEvaluator(None, units[0]) + + # get the outputpath + # this is messy as some configs construct the path inside the FLM + # rather than talking it from the XML: usually because of some + # conditional logic... but maybe some refactoring could avoid that. + releasepath = evaluator.Get("RELEASEPATH") + if not releasepath: + raise BadQuery("could not get RELEASEPATH for config '%s'" % name) + + variantplatform = evaluator.Get("VARIANTPLATFORM") + varianttype = evaluator.Get("VARIANTTYPE") + featurevariantname = evaluator.Get("FEATUREVARIANTNAME") + + platform = evaluator.Get("TRADITIONAL_PLATFORM") + + if platform == "TOOLS2": + outputpath = releasepath + else: + if not variantplatform: + raise BadQuery("could not get VARIANTPLATFORM for config '%s'" % name) + + if featurevariantname: + variantplatform += featurevariantname + + if not varianttype: + raise BadQuery("could not get VARIANTTYPE for config '%s'" % name) + + outputpath = str(generic_path.Join(releasepath, variantplatform, varianttype)) + + return Config(fullname, outputpath) + + def getproducts(self): + """extract all product variants.""" + + variants = [] + + for v in self.__raptor.cache.variants.values(): + if v.type == "product": + # copy the members we want to expose + variants.append( Product(v.name) ) + + return variants + +class BadQuery(Exception): + pass + +# end of the raptor_api module diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/python/raptor_buildplatform.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/raptor_buildplatform.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,158 @@ +# +# 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: +# Classes, methods and regex available for use in log filters +# + +# This particular file is preliminary and under development. + +class BuildPlatform(object): + """ A build platform is a set of configurations which share + the same metadata. In other words, a set of configurations + for which the bld.inf and MMP files pre-process to exactly + the same text.""" + + def __init__(self, build): + evaluator = build.GetEvaluator(None, buildConfig) + self.selfform= evaluator.CheckedGet("TRADITIONAL_PLATFORM") + epocroot = evaluator.CheckedGet("EPOCROOT") + self.epocroot = generic_path.Path(epocroot) + + sbs_build_dir = evaluator.CheckedGet("SBS_BUILD_DIR") + self.sbs_build_dir = generic_path.Path(sbs_build_dir) + flm_export_dir = evaluator.CheckedGet("FLM_EXPORT_DIR") + self.flm_export_dir = generic_path.Path(flm_export_dir) + self.cacheid = flm_export_dir + if raptor_utilities.getOSPlatform().startswith("win"): + self.platmacros = evaluator.CheckedGet( "PLATMACROS.WINDOWS") + else: + self.platmacros = evaluator.CheckedGet( "PLATMACROS.LINUX") + + + # is this a feature variant config or an ordinary variant + fv = evaluator.Get("FEATUREVARIANTNAME") + if fv: + variantHdr = evaluator.CheckedGet("VARIANT_HRH") + variantHRH = generic_path.Path(variantHdr) + self.isfeaturevariant = True + else: + variantCfg = evaluator.CheckedGet("VARIANT_CFG") + variantCfg = generic_path.Path(variantCfg) + if not variantCfg in variantCfgs: + # get VARIANT_HRH from the variant.cfg file + varCfg = getVariantCfgDetail(self.epocroot, variantCfg) + variantCfgs[variantCfg] = varCfg['VARIANT_HRH'] + # we expect to always build ABIv2 + if not 'ENABLE_ABIV2_MODE' in varCfg: + build.Warn("missing flag ENABLE_ABIV2_MODE in %s file. ABIV1 builds are not supported.", + str(variantCfg)) + variantHRH = variantCfgs[variantCfg] + self.isfeaturevariant = False + + self.variant_hrh = variantHRH + build.Info("'%s' uses variant hrh file '%s'", buildConfig.name, variantHRH) + self.systeminclude = evaluator.CheckedGet("SYSTEMINCLUDE") + + + # find all the interface names we need + ifaceTypes = evaluator.CheckedGet("INTERFACE_TYPES") + interfaces = ifaceTypes.split() + + for iface in interfaces: + detail[iface] = evaluator.CheckedGet("INTERFACE." + iface) + + # not test code unless positively specified + self.testcode = evaluator.CheckedGet("TESTCODE", "") + + # make a key that identifies this platform uniquely + # - used to tell us whether we have done the pre-processing + # we need already using another platform with compatible values. + + key = str(self.variant_hrh) \ + + str(self.epocroot) \ + + self.systeminclude \ + + self.platform + + # Keep a short version of the key for use in filenames. + uniq = hashlib.md5() + uniq.update(key) + + plat.key = key + plat.key_md5 = "p_" + uniq.hexdigest() + del uniq + + def __hash__(self): + return hash(self.platform) + hash(self.epocroot) + hash(self.variant_hrh) + hash(self.systeminclude) + hash(self.testcode) + + def __cmp__(self,other): + return cmp(self.hash(), other.hash()) + + + @classmethod + def fromConfigs(configsToBuild, build): + """ Group the list of configurations into "build platforms".""" + platforms = Set() + + for buildConfig in configsToBuild: + # get everything we need to know about the configuration + plat = BuildPlatform(build = build) + + # compare this configuration to the ones we have already seen + + # Is this an unseen export platform? + # concatenate all the values we care about in a fixed order + # and use that as a signature for the exports. + items = ['EPOCROOT', 'VARIANT_HRH', 'SYSTEMINCLUDE', 'TESTCODE', 'export'] + export = "" + for i in items: + if i in detail: + export += i + str(detail[i]) + + if export in exports: + # add this configuration to an existing export platform + index = exports[export] + self.ExportPlatforms[index]['configs'].append(buildConfig) + else: + # create a new export platform with this configuration + exports[export] = len(self.ExportPlatforms) + exp = copy.copy(detail) + exp['PLATFORM'] = 'EXPORT' + exp['configs'] = [buildConfig] + self.ExportPlatforms.append(exp) + + # Is this an unseen build platform? + # concatenate all the values we care about in a fixed order + # and use that as a signature for the platform. + items = ['PLATFORM', 'EPOCROOT', 'VARIANT_HRH', 'SYSTEMINCLUDE', 'TESTCODE'] + if raptor_utilities.getOSPlatform().startswith("win"): + items.append('PLATMACROS.WINDOWS') + else: + items.append('PLATMACROS.LINUX') + + items.extend(interfaces) + platform = "" + for i in items: + if i in detail: + platform += i + str(detail[i]) + + if platform in platforms: + # add this configuration to an existing build platform + index = platforms[platform] + BuildPlatforms[index]['configs'].append(buildConfig) + else: + # create a new build platform with this configuration + platforms[platform] = len(self.BuildPlatforms) + plat.configs = [buildConfig] + BuildPlatforms.append(detail) + diff -r 360bd6b35136 -r 22486c9c7b15 sbsv2/raptor/python/raptor_timing.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/raptor_timing.py Wed Jun 23 17:27:59 2010 +0800 @@ -0,0 +1,168 @@ +# +# 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: +# timings API +# This API can be used to start and stop timings in order to measure performance +# +import time + +class Timing(object): + + @classmethod + def discovery_string(cls, object_type, count): + """ + Returns a tag that can be used to show what is about to be + "processed" + Parameters: + object_type - string + Type of object that is about to be "processed" in this task + count - int + Number of objects of input "object_type" are about to be + "processed" + Returns: + string + XML tag in the format that can be printed directly to a + Raptor log + """ + return "\n" + + + @classmethod + def start_string(cls, object_type, task, key): + """ + Returns a tag that can be used to show what is being "processed" + and the time it started + Parameters: + object_type - string + Type of object that is being "processed" in this task + task - string + What is being done with the object being "processed" + key - string + Unique identifier for the object being "processed" + Returns: + string + XML tag in the format that can be printed directly to a + Raptor log + """ + return "\n" + + + @classmethod + def end_string(cls, object_type, task, key): + """ + Returns a tag that can be used to show what was being "processed" + and the time it finished + Parameters: + object_type - string + Type of object that was being "processed" in this task + task - string + What was being done with the object being "processed" + key - string + Unique identifier for the object that was "processed" + Returns: + string + XML tag in the format that can be printed directly to a + Raptor log + """ + return "\n" + + + @classmethod + def custom_string(cls, tag = "duration", object_type = "all", task = "all", + key = "all", time = 0.0): + """ + Returns a custom tag in the 'progress' tag format + + Parameters: + tag - string + String to be used for the tag + object_type - string + Type of object that was being "processed" in this task + task - string + What was being done with the object being "processed" + key - string + Unique identifier for the object that was "processed" + time - float + The time to be included in the tag + Returns: + string + XML tag in the format that can be printed directly to a + Raptor log + """ + time_string = "time" + if tag == "duration": + time_string = "duration" + return "\n" + + + @classmethod + def extract_values(cls, source): + """ + Takes, as input, a single tag of the format returned by one of the + above progress functions. Will extract the attributes and + return them as a dictionary. Returns an empty dictionary {} + if the tag name is not recognised or there is a parse error + Parameters: + source - string + The input string from which extracted attributes are + required + Returns: + dictionary + Dictionary containing the attributes extracted from the + input string. Returns an empty dictionary {} if the + tag name is not recognised or there is a parse error + NB: This function will not work correctly if the 'source' variable + contains multiple tags + """ + import re + + attributes = {} + + try: + match = re.match(re.compile(".*object_type='(?P.*?)'"), + source) + attributes["object_type"] = match.group("object_type") + except AttributeError, e: + print e + attributes["object_type"] = "" + try: + match = re.match(re.compile(".*task='(?P.*?)'"), source) + attributes["task"] = match.group("task") + except AttributeError, e: + print e + attributes["task"] = "" + try: + match = re.match(re.compile(".*key='(?P.*?)'"), source) + attributes["key"] = match.group("key") + except AttributeError: + attributes["key"] = "" + try: + match = re.match(re.compile(".*time='(?P