Merge
authortimothy.murphy@nokia.com
Mon, 15 Feb 2010 13:47:40 +0000
changeset 210 fd8c90cfa36c
parent 178 4e477ddf2eed (current diff)
parent 209 604f2aceff59 (diff)
child 211 b06effc0c547
Merge
--- a/sbsv2/raptor/RELEASE-NOTES.txt	Mon Feb 01 10:03:36 2010 +0000
+++ b/sbsv2/raptor/RELEASE-NOTES.txt	Mon Feb 15 13:47:40 2010 +0000
@@ -1,5 +1,12 @@
+Release Notes for Symbian Build System v2
 
-Release Notes for Symbian Build System v2
+next version
+
+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
 
 version 2.12.1
 
--- a/sbsv2/raptor/bin/sbs_filter	Mon Feb 01 10:03:36 2010 +0000
+++ b/sbsv2/raptor/bin/sbs_filter	Mon Feb 15 13:47:40 2010 +0000
@@ -45,8 +45,8 @@
 
 	__MINGW__=${SBS_MINGW:-$SBS_HOME/$HOSTPLATFORM_DIR/mingw}
 	__CYGWIN__=${SBS_CYGWIN:-$SBS_HOME/$HOSTPLATFORM_DIR/cygwin}
-	__PYTHON__=${SBS_PYTHON:-$SBS_HOME/$HOSTPLATFORM_DIR/python252/python.exe}
-	export PYTHONPATH=${SBS_PYTHONPATH:-$SBS_HOME/$HOSTPLATFORM_DIR/python252}
+	__PYTHON__=${SBS_PYTHON:-$SBS_HOME/$HOSTPLATFORM_DIR/python264/python.exe}
+	export PYTHONPATH=${SBS_PYTHONPATH:-$SBS_HOME/$HOSTPLATFORM_DIR/python264}
 
     # Command for unifying path strings. For example, "c:\some\path" and
     # "/cygdrive/c/some/path" will both be converted into "c:/some/path".
--- a/sbsv2/raptor/bin/sbs_filter.py	Mon Feb 01 10:03:36 2010 +0000
+++ b/sbsv2/raptor/bin/sbs_filter.py	Mon Feb 15 13:47:40 2010 +0000
@@ -71,7 +71,7 @@
 	while line:
 		line = sys.stdin.readline()
 		the_raptor.out.write(line)
-except:
+except Exception,e:
 	sys.stderr.write("error: problem while filtering: %s\n" % str(e))
 	traceback.print_exc()
 	sys.exit(1)
--- a/sbsv2/raptor/lib/flm/e32abiv2.flm	Mon Feb 01 10:03:36 2010 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2.flm	Mon Feb 15 13:47:40 2010 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -757,7 +757,7 @@
 $(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
 
 # $4 is for language specific options (e.g. C++ vs C)
-$(1): $(2) $(PROJECT_META) $(if $(MULTIFILE_ENABLED),,$(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)) $(if $(USE_TRACE_COMPILER),$(TRACE_MARKER),) $(if $(LINKERFEEDBACK_STAGE2),$(FEEDBACKFILE),)
+$(1): $(2) $(PROJECT_META) $(if $(MULTIFILE_ENABLED),,$(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)) $(if $(LINKERFEEDBACK_STAGE2),$(FEEDBACKFILE),) | $(if $(USE_TRACE_COMPILER),$(TRACE_MARKER),)  
 	$(call startrule,compile,,$(2))		\
 		$(if $(PERTURBSTARTTIME), $(RANSLEEP) $(PERTURBMSECS) ;,) \
 		$(if $(MULTIFILE_ENABLED), echo $(2) $(3) > $(MULTIFILE_VIAFILE) ;,) \
--- a/sbsv2/raptor/lib/flm/win32.flm	Mon Feb 01 10:03:36 2010 +0000
+++ b/sbsv2/raptor/lib/flm/win32.flm	Mon Feb 15 13:47:40 2010 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -375,7 +375,7 @@
     $(eval DEPENDFILENAME:=$(call mapwin32file,$(1),.o.d))
     $(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
 
-    $(call mapwin32file,$(1),.o): $(1) $(PROJECT_META) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT) $(if $(USE_TRACE_COMPILER),$(TRACE_MARKER))
+    $(call mapwin32file,$(1),.o): $(1) $(PROJECT_META) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT) | $(if $(USE_TRACE_COMPILER),$(TRACE_MARKER))
 	  $(call startrule,win32compile2object,,$(1)) \
 	  $(CC) $$(if $$(filter %.C,$(1)),-lang c) $(CFLAGS) $(OPTION_CW) \
 	  $(if $(STDCPP_BUILD),$$(if $$(filter %.c %.C,$(1)),,$$(call makemacrodef,$(OPT.DEFINE),$(STDCPP_WCHAR_DEF))),) \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/plugins/filter_checkcomp.py	Mon Feb 15 13:47:40 2010 +0000
@@ -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
--- a/sbsv2/raptor/python/plugins/filter_what.py	Mon Feb 01 10:03:36 2010 +0000
+++ b/sbsv2/raptor/python/plugins/filter_what.py	Mon Feb 15 13:47:40 2010 +0000
@@ -26,6 +26,7 @@
 		super(filter_interface.Filter,self).__init__()
 		self.path_prefix_to_strip = None
 		self.path_prefix_to_add_on = None
+		self.check = False
 	
 	def print_file(self, line, start, end):
 		"Ensure DOS slashes on Windows"
@@ -33,19 +34,27 @@
 		"""Use chars between enclosing tags ("<>", "''", etc)
 				start = opening tag, so the line we need
 				actually starts at 'start + 1' """
+
+		abs_filename = line[(start + 1):end]
+		filename = abs_filename
+
+		# Adjust drive letters for case insensitivity on windows
+
+		path_prefix_to_strip = self.path_prefix_to_strip
 		if "win" in self.buildparameters.platform:
-			filename = line[(start + 1):end].replace("/","\\")
-		else:
-			filename = line[(start + 1):end]
+			filename = filename[0].upper()+filename[1:]
+			filename = filename.replace("/","\\")
 
-		if self.path_prefix_to_strip:
-			if filename.startswith(self.path_prefix_to_strip):
-				filename = filename[len(self.path_prefix_to_strip):]
+		if path_prefix_to_strip:
+			if "win" in self.buildparameters.platform:
+				path_prefix_to_strip = path_prefix_to_strip[0].upper()+path_prefix_to_strip[1:].replace("/","\\")
+			if filename.startswith(path_prefix_to_strip):
+				filename = filename[len(path_prefix_to_strip):]
 			if self.path_prefix_to_add_on != None:
 				filename = self.path_prefix_to_add_on + filename
 			
 		if self.check:
-			if not os.path.isfile(filename):
+			if not os.path.isfile(abs_filename):
 				print "MISSING:", filename
 				self.ok = False
 		else:
@@ -63,8 +72,10 @@
 	def open(self, build_parameters):
 		"initialise"
 		
+
 		self.buildparameters = build_parameters
-		self.check = build_parameters.doCheck
+		if build_parameters.doCheck:
+			self.check = True
 		self.what = build_parameters.doWhat
 
 		self.outfile = sys.stdout
--- a/sbsv2/raptor/python/plugins/filter_whatcomp.py	Mon Feb 01 10:03:36 2010 +0000
+++ b/sbsv2/raptor/python/plugins/filter_whatcomp.py	Mon Feb 15 13:47:40 2010 +0000
@@ -24,7 +24,7 @@
 class FilterWhatComp(filter_what.FilterWhat):
 
         def __init__(self): 
-		super(filter_what.FilterWhat, self).__init__()
+		super(FilterWhatComp, self).__init__()
 
 	def write(self, text):
 		"process some log text"
--- a/sbsv2/raptor/python/raptor.py	Mon Feb 01 10:03:36 2010 +0000
+++ b/sbsv2/raptor/python/raptor.py	Mon Feb 15 13:47:40 2010 +0000
@@ -1276,15 +1276,17 @@
 			if self.toolcheck != 'off':
 				self.CheckConfigs(buildUnitsToBuild)
 			else:
-				self.Info(" Not Checking Tool Versions")
+				self.Info("Not Checking Tool Versions")
 
 			self.AssertBuildOK()
 
 			# Setup a make engine.
 			if not self.maker:
-				self.maker = raptor_make.MakeEngine(self)
-				if self.maker == None:
-					self.Error("No make engine present")
+				try:
+					self.maker = raptor_make.MakeEngine(self, self.makeEngine)
+				except raptor_make.BadMakeEngineException,e:
+					self.Error("Unable to use make engine: %s " % str(e))
+					
 
 			self.AssertBuildOK()
 
--- a/sbsv2/raptor/python/raptor_data.py	Mon Feb 01 10:03:36 2010 +0000
+++ b/sbsv2/raptor/python/raptor_data.py	Mon Feb 15 13:47:40 2010 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -884,6 +884,21 @@
 			vars.append(m)
 		return [ BuildUnit(name=name, variants=vars) ]
 
+	def isDerivedFrom(self, progenitor, cache):
+		if self.name == progenitor:
+			return True
+
+		pname = self.extends
+		while pname is not None and pname is not '':
+			parent = cache.FindNamedVariant(pname)
+			if parent is None:
+				break
+			if parent.name == progenitor:
+				return True
+			pname = parent.extends
+
+		return False
+
 	def __str__(self):
 		s = "<var name='%s' extends='%s'>\n" % (self.name, self.extends)
 		for op in self.ops:
@@ -936,7 +951,7 @@
 	def Valid(self):
 		return self.name and self.meaning
 
-	def GenerateBuildUnits(self, cache):
+	def Resolve(self, cache):
 		if not self.variants:
 			missing_variants = []
 			for r in self.varRefs:
@@ -948,6 +963,9 @@
 			if len(missing_variants) > 0:
 				raise MissingVariantException("Missing variants '%s'", " ".join(missing_variants))
 
+	def GenerateBuildUnits(self, cache):
+		self.Resolve(cache)
+
 		name = self.name
 
 		for v in self.modifiers:
@@ -955,6 +973,12 @@
 
 		return [ BuildUnit(name=name, variants=self.variants + self.modifiers) ]
 
+	def isDerivedFrom(self, progenitor, cache):
+		self.Resolve(cache)
+		for v in self.variants:
+			if v.isDerivedFrom(progenitor,cache):
+				return True
+		return False
 
 class AliasRef(Reference):
 
--- a/sbsv2/raptor/python/raptor_make.py	Mon Feb 01 10:03:36 2010 +0000
+++ b/sbsv2/raptor/python/raptor_make.py	Mon Feb 15 13:47:40 2010 +0000
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -33,18 +33,19 @@
 from xml.sax.saxutils import escape
 
 
+class BadMakeEngineException(Exception):
+	pass
+
 # raptor_make module classes
 
 class MakeEngine(object):
 
-	def __init__(self, Raptor):
+	def __init__(self, Raptor, engine="make_engine"):
 		self.raptor = Raptor
 		self.valid = True
 		self.descrambler = None
 		self.descrambler_started = False
 
-		engine = Raptor.makeEngine
-		
 		# look for an alias first as this gives end-users a chance to modify
 		# the shipped variant rather than completely replacing it.
 		if engine in Raptor.cache.aliases:
@@ -52,8 +53,10 @@
 		elif engine in Raptor.cache.variants:
 			avar = Raptor.cache.FindNamedVariant(engine)
 		else:
-			Raptor.Error("No settings found for build engine '%s'", engine)
-			return
+			raise BadMakeEngineException("'%s' does not appear to be a make engine - no settings found for it" % engine)
+
+		if not avar.isDerivedFrom("make_engine", Raptor.cache):
+			raise BadMakeEngineException("'%s' is not a build engine (it's a variant but it does not extend 'make_engine')" % engine)
 					
 		# find the variant and extract the values
 		try:
@@ -105,14 +108,13 @@
 				self.selectors = []
 
 		except KeyError:
-			Raptor.Error("Bad '%s' configuration found.", engine)
 			self.valid = False
-			return
+			raise BadMakeEngineException("Bad '%s' configuration found." % engine)
 
 		# there must at least be a build command...
 		if not self.buildCommand:
-				Raptor.Error("No build command for '%s'", engine)
-				self.valid = False
+			self.valid = False
+			raise BadMakeEngineException("No build command for '%s'"% engine)
 
 
 		if self.usetalon:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/custom_options/dfsconfig/.sbs_init.xml	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+	<var name="make_changes">
+	<set name="bitmap.selector.iface" value="\.(bitmap|extension|mifconv|akniconinterfaces|removegtfiles|skingenerator|cryptoprep|builder|help_files|version_update)$"/>
+		<set name="resource.selector.iface" value="\.(resource|extension|mif2cdlindex|nativejava|genericcopy)$"/>
+   <set name="default.selector.iface" value="\.(?!export$|bitmap$|resource$|mifconv$|mif2cdlindex$|nativejava$|akniconinterfaces$|removegtfiles$|genericcopy$|skingenerator$|cryptoprep$|builder$|help_files$|version_update$).*$"/>
+    <!-- 4.5 min -->
+	  <set name='TALON_TIMEOUT' value='540000'/> 
+  </var>
+
+	<!-- emake -->
+	<alias name="emake" meaning="emake_engine.make_changes"/>  
+
+	<!-- gnu make -->
+	<alias name="make" meaning="make_engine.make_changes"/>
+	<alias name="dfstestmake" meaning="make_engine.make_changes"/>
+
+	
+</build>
--- a/sbsv2/raptor/test/smoke_suite/exe_armv5.py	Mon Feb 01 10:03:36 2010 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5.py	Mon Feb 15 13:47:40 2010 +0000
@@ -104,7 +104,8 @@
 	t.run()	
 	if t.result == SmokeTest.FAIL:
 		result = SmokeTest.FAIL	
-		
+	
+
 	t.id = "0001c"
 	t.name = "exe_armv5_gcce"
 	t.command = command % "gcce_armv5"
@@ -117,6 +118,22 @@
 	if t.result == SmokeTest.FAIL:
 		result = SmokeTest.FAIL	
 
+
+	# Test for the Check Filter to ensure that it reports 
+	# missing files properly when used from sbs_filter.py:
+	import os
+	abs_epocroot = os.path.abspath(os.environ["EPOCROOT"])
+	t.id = "0001d"
+	t.command = "rm $(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map; sbs_filter  --filters=FilterCheck < ${SBSLOGFILE}"
+	t.targets = []
+	t.mustmatch = ["MISSING:[ 	]+" + abs_epocroot.replace("\\","\\\\") + ".epoc32.release.armv5.udeb.test\.exe\.map.*"]
+	t.mustnotmatch = []
+	t.warnings = 1
+	t.returncode = 2
+	t.run()
+
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL	
 	t.id = "1"
 	t.name = "exe_armv5"
 	t.result = result
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/input_validation.py	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,58 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.description = "Set of tests for commandline option validation e.g. checking that the specified make engine exists"
+	
+	
+	t.usebash = True
+	t.errors = 1
+	t.returncode = 1
+	t.exceptions = 0
+	base_command = "sbs -b smoke_suite/test_resources/simple/bld.inf -f ${SBSLOGFILE} -m ${SBSMAKEFILE}"
+	
+	t.id = "42562a"
+	t.name = "validate_makeengine_nonexist"
+	t.command = base_command + " -e amakeenginethatdoesnotexist"
+	t.mustmatch = ["Unable to use make engine: 'amakeenginethatdoesnotexist' does not appear to be a make engine - no settings found for it"]
+
+	t.run()
+
+	t.id = "43562b"
+	t.mustmatch = ["Unable to use make engine: 'arm' is not a build engine \(it's a variant but it does not extend 'make_engine'"]
+	t.name = "validate_makeengine_is_a_non_makengine_variant"
+	t.command = base_command + " -e arm"
+	t.run()
+
+	# aliases can be of the form name='blah' meaning='x.y.z'  i.e. where the alias is for a sequence of variants
+	# this tests that we detect that at least one of these variants has make_engine as a parent
+	# it is possible for one of them not to and we mustn't bomb-out just because of that
+	t.id = "43562c"
+	t.mustmatch = []
+	t.name = "validate_real_dfs_modded_makeengine_alias"
+	t.command = "export HOME=$SBS_HOME/test/custom_options/dfsconfig;  " + base_command + " -e dfstestmake -c arm.v5.urel.gcce4_4_1"
+	t.errors = 0
+	t.warnings = 0
+	t.returncode = 0
+	t.run()
+	
+	t.id = "43562"
+	t.name = "input_validation"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/CommonFramework.h	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-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: 
+*
+*/
+
+
+
+#ifndef __CommonFramework_H
+#define __CommonFramework_H
+
+#include <e32base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/TCSTATICDLLWINS.def	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,4 @@
+EXPORTS
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; ?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; ?ShowMessage@CMessenger@@QAEXXZ
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/bld.inf	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+WINSCW
+
+PRJ_MMPFILES
+
+tcwinsStaticDLL.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsStaticDLL.cpp	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2000-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: 
+* This program creates a dll.
+*
+*/
+
+
+#include "tcwinsStaticDLL.h"
+#include <e32uid.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "tcwinsStaticDLLTraces.h"
+#endif
+
+
+// construct/destruct
+
+
+extern "C" void __ARM_switch8();
+
+void sbs_test()
+	{
+	__ARM_switch8();
+	}
+
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	OstTrace0( TRACE_API, CMESSENGER_NEWL, "CMessenger::NewLC()" );
+	OstTrace0( TRACE_NORMAL, DUP1_CMESSENGER_NEWL, "CMessenger::NewLC()" );  
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	OstTrace0( TRACE_API, DUP1_CMESSENGER_CMESSENGER, "CMessenger::~CMessenger()" );
+	OstTrace0( TRACE_NORMAL, DUP2_CMESSENGER_CMESSENGER, "CMessenger::~CMessenger()" );  
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsStaticDLL.h	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2000-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: 
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsStaticDLL.mmp	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2000-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: 
+*
+*/
+
+TARGET        tcwinsstaticdll.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        tcwinsStaticDLL.cpp
+SOURCE        tcwinsfiletwo.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/internal
+USERINCLUDE traces
+
+LIBRARY       euser.lib
+
+#if defined(WINS)
+    deffile ./TCSTATICDLLWINS.def
+#endif
+nostrictdef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsfiletwo.cpp	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates a dll.
+*
+*/
+
+
+#include "tcwinsfiletwo.h"
+#include <e32uid.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "tcwinsfiletwoTraces.h"
+#endif
+
+
+// construct/destruct
+
+
+extern "C" void __ARM_switch8();
+
+EXPORT_C CMessenger2* CMessenger2::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	OstTrace0( TRACE_NORMAL, DUP1_CMESSENGER2_NEWL, "CMessenger2::NewLC()" );  
+	CMessenger2* self=new (ELeave) CMessenger2(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger2::~CMessenger2() // destruct - virtual, so no export
+	{
+	OstTrace0( TRACE_API, DUP1_CMESSENGER2_CMESSENGER2, "CMessenger2::~CMessenger2()" );
+	delete iString;
+	}
+
+EXPORT_C void CMessenger2::ShowMessage()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger2::CMessenger2(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger2::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsfiletwo.h	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger2 : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger2* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger2();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger2(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/traces/OstTraceDefinitions.h	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <OpenSystemTrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/bld.inf	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2000-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: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+WINSCW
+
+PRJ_MMPFILES
+win32resourcedll.mmp
Binary file sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/epoc32.ico has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/gui.rc	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,79 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <windows.h>
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.K.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+EPOC_ICON               ICON    DISCARDABLE     "epoc32.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Cursor
+//
+
+OVERKEY                 CURSOR  DISCARDABLE     "hand.cur"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+#endif    // English (U.K.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
Binary file sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/hand.cur has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/resource.h	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,33 @@
+/*
+* 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: 
+*
+*/
+ //{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by gui.rc
+//
+#define EPOC_ICON                       102
+#define OVERKEY                         104
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        105
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1000
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/win32resourcedll.mmp	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2000-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: 
+*
+*/
+
+
+#include "../CreateStaticDLL.mmp"
+
+START WINS
+WIN32_RESOURCE gui.rc
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tracecompiler_incremental.py	Mon Feb 15 13:47:40 2010 +0000
@@ -0,0 +1,58 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.description = "Test incremental rebuilding with TC on"
+	t.id = "114a"
+	t.name = "tracecompiler_incremental_clean"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5_urel.tracecompiler CLEAN"
+	t.run("windows")
+
+	t.id = "114b"
+	t.name = "tracecompiler_incremental_prebuild"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5_urel.tracecompiler -f - -m ${SBSMAKEFILE}"
+	t.countmatch = [ ["name='compile'",3] ]
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll.map",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitmainTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitpermparserTraces.h",	
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/fixed_id.definitions",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/testTC_0x1000008d_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/testTC_0x1000008d_TraceDefinitions.h"
+		]
+	t.run("windows")
+
+	t.id = "114c"
+	t.name = "tracecompiler_incremental_rebuild"
+	t.command = "touch smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinit.cpp && sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5_urel.tracecompiler -f - -m ${SBSMAKEFILE}"
+	t.countmatch = [ ["name='compile'",1] ]
+	t.targets = []
+	t.run("windows")
+
+	t.id = "114"
+	t.name = "tracecompiler_incremental"
+	return t
+
--- a/sbsv2/raptor/test/smoke_suite/tracecompiler_whatlog.py	Mon Feb 01 10:03:36 2010 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tracecompiler_whatlog.py	Mon Feb 15 13:47:40 2010 +0000
@@ -14,13 +14,21 @@
 # Description: 
 #
 
-from raptor_tests import CheckWhatSmokeTest,AntiTargetSmokeTest
+from raptor_tests import CheckWhatSmokeTest,SmokeTest
 import re
 
 def run():
+	t = SmokeTest()
+	t.description = "Trace Compiler Whatlog Clean"
+	t.id = "112a"
+	t.name = "tracecompiler_whatlog_clean"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5.tracecompiler CLEAN"
+	t.run("windows")
+
 	t = CheckWhatSmokeTest()
 	t.description = "Trace Compiler Whatlog test"
-	t.id = "xxx"
+	t.id = "112b"
 	t.name = "tracecompiler_whatlog"
 	t.usebash = True
 	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5.tracecompiler -m ${SBSMAKEFILE} -f ${SBSLOGFILE} && cat ${SBSLOGFILE}"
@@ -57,6 +65,7 @@
 		"<build>$(EPOCROOT)/epoc32/include/internal/SymbianTraces/autogen/testTC_0x1000008d_TraceDefinitions.h</build>"
 		]		
 	t.run("windows")
+	t.id = "112"
 
 	return t