Merge from fix
authorIain Williamson <iain.williamson@nokia.com>
Thu, 27 May 2010 17:04:53 +0100
changeset 578 cad543700ad8
parent 556 8e705bc1286f (current diff)
parent 577 70a350fada5a (diff)
child 579 e26b09d36de0
Merge from fix
--- a/sbsv2/raptor/RELEASE-NOTES.html	Wed May 19 14:17:41 2010 +0100
+++ b/sbsv2/raptor/RELEASE-NOTES.html	Thu May 27 17:04:53 2010 +0100
@@ -6,6 +6,17 @@
 
 <h1>Release Notes for Symbian Build System v2</h1>
 
+<h2>next version</h2>
+ 
+<h3>Defect Fixes</h3>
+<ul>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2203"> SF Bug 2203 </a> - [Raptor] Building extension makefile with SBS_BUILD_DIR set to another drive</li>
+<li>Fix : tracecompiler.mk caused poor makefile parse performance due to use of $(shell)</li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2561">SF Bug 2561</a> - [Raptor] creates incorrect .iby files w.r.t target file versions &amp; ramtargets</li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2562">SF Bug 2562</a> - [Raptor] adds incorrect entries into .iby files w.r.t file paths</li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2809">SF Bug 2809</a> - [Raptor] Intermediate Resource Filenames not unique (2.14.0 only), rom fails to boot</li>
+</ul>
+
 <h2>version 2.14.0</h2>
 
 <h3>New Features</h3>
@@ -31,7 +42,6 @@
 <li><a href="notes/localresourcecopying.txt">Fix: (performance in cluster builds) do resource copying on local host.</a></li>
 <li>Fix: don't generate multiple copies of the same resource just because there are several target paths. Generate it once and copy that to the different target paths. Helps when winscw is built after an arm build.</li>
 <li>Fix: (performance) remove unnecessary copying of rpp files into epoc32\localisation as they are not used.</li>
-<li>Fix: (performance) remove -C option when preprocessing rpp files - causes comments to be stripped from the rpp resulting in smaller files that improves performance.</li>
 
 </ul>
 
--- a/sbsv2/raptor/lib/flm/e32abiv2.flm	Wed May 19 14:17:41 2010 +0100
+++ b/sbsv2/raptor/lib/flm/e32abiv2.flm	Thu May 27 17:04:53 2010 +0100
@@ -1102,7 +1102,7 @@
         # Default values
         ROMFILETYPE:=file
         ROMFILE:=$(TARGET).$(REQUESTEDTARGETEXT)
-        ROMPATH:=sys/bin/
+        ROMPATH:=$(if $(TARGETPATH),$(TARGETPATH)/,sys/bin/)
         ROMDECORATIONS:=
         ROMFILETYPE_RAM:=data
         ROMFILE_RAM:=$(TARGET).$(REQUESTEDTARGETEXT)
@@ -1179,8 +1179,8 @@
 	        $(call startrule,rombuild)	\
 	        $(GNUMKDIR) -p $(ROMDIR) \
             $(if $(ROMFILE_CREATED_$(TOBLDINF)),,&& echo -e "// $(subst $(EPOC_ROOT)/,,$(ROMFILENAME))\n//\n$(DATATEXT)" > $(ROMFILENAME)) \
-            $(if $(BUILDROMTARGET),&& echo "$(ROMFILETYPE)=/epoc32/release/##$(ABIDIR)##/##BUILD##/$(TARGET).$(REQUESTEDTARGETEXT)   $(1)$(ROMDECORATIONS)" >> $(ROMFILENAME))	\
-	        $(if $(RAMTARGET),&& echo "$(ROMFILETYPE_RAM)=/epoc32/release/##$(ABIDIR)##/##BUILD##/$(TARGET).$(REQUESTEDTARGETEXT)   $(ROMPATH_RAM)$(ROMFILE_RAM)$(ROMDECORATIONS_RAM)" >> $(ROMFILENAME))	\
+            $(if $(BUILDROMTARGET),&& echo "$(ROMFILETYPE)=/epoc32/release/##$(ABIDIR)##/##BUILD##/$(TARGET)$(if $(EXPLICITVERSION),{$(VERSIONHEX)},).$(REQUESTEDTARGETEXT)   $(1)$(ROMDECORATIONS)" >> $(ROMFILENAME))	\
+	        $(if $(RAMTARGET),&& echo "$(ROMFILETYPE_RAM)=/epoc32/release/##$(ABIDIR)##/##BUILD##/$(TARGET)$(if $(EXPLICITVERSION),{$(VERSIONHEX)},).$(REQUESTEDTARGETEXT)   $(ROMPATH_RAM)$(ROMFILE_RAM)$(ROMDECORATIONS_RAM)" >> $(ROMFILENAME))	\
 	        $(call endrule,buildromfiletarget)
     endef
 
--- a/sbsv2/raptor/lib/flm/resource.flm	Wed May 19 14:17:41 2010 +0100
+++ b/sbsv2/raptor/lib/flm/resource.flm	Thu May 27 17:04:53 2010 +0100
@@ -65,7 +65,6 @@
 
 # we create intermediate .rpp and .d files
 INTERBASE_TMP:=$(OUTPUTPATH)/$(TARGET_lower)_$(notdir $(basename $(SOURCE)))
-INTERBASE:=$(OUTPUTPATH)/$(TARGET_lower)
 
 
 # common pre-processor options
@@ -94,14 +93,13 @@
 
 
 define preprocessresource
-# $(1) is the RPPFILE		(eg. /epoc32/build/xxx/b_sc.rpp)
-# $(2) is the related RESOURCEFILE if any (eg. /a/b.rsc)
-# $(3) is the LANGUAGE		(eg. sc or 01 or 02 ...)
-# $(4) is the "primary" language on which all the others depend
+# $1 is the RPPFILE		(eg. /epoc32/build/xxx/b_sc.rpp)
+# $2 is the LANGUAGE		(eg. sc or 01 or 02 ...)
+# $3 is the "primary" language on which all the others depend
 
   ifeq ($(TARGET_$(call sanitise,$1)),)
     TARGET_$(call sanitise,$1):=1
-    $(if $(FLMDEBUG),$$(info <debug>preprocessresource: $(1) for $(2) LANG:$(3) dep $(4)</debug>))
+    $(if $(FLMDEBUG),$$(info <debug>preprocessresource: $1 LANG:$2 dep $3</debug>))
 
 
     # Correct dependency information when a header file can't be found.
@@ -126,12 +124,12 @@
 endif
 
 
-    ifeq "$1" "$4"
+    ifeq "$1" "$3"
         RESOURCE_DEPS:: $1.d
 
         $1.d: $(SOURCE)
 	  $(call startrule,resourcedependencies,FORCESUCCESS) \
-	  $(GNUCPP) -DLANGUAGE_$(3) -DLANGUAGE_$(subst sc,SC,$3) $(call makemacrodef,-D,$(MMPDEFS))\
+	  $(GNUCPP) -DLANGUAGE_$2 -DLANGUAGE_$(subst sc,SC,$2) $(call makemacrodef,-D,$(MMPDEFS))\
 	  $(CPPOPT) $(SOURCE) -M -MG -MT"$1" | \
 	  $$(DEPENDENCY_CORRECTOR) >$$@ \
 	  $(call endrule,resourcedependencies)
@@ -139,12 +137,12 @@
          $1 : $1.d
 
     else
-         $1 : $4
+         $1 : $3
     endif
 
     $1:
 	  $(call startrule,resourcepreprocess,FORCESUCCESS) \
-	  $(GNUCPP) -C -DLANGUAGE_$3 -DLANGUAGE_$(subst sc,SC,$(3)) $(call makemacrodef,-D,$(MMPDEFS))\
+	  $(GNUCPP) -C -DLANGUAGE_$2 -DLANGUAGE_$(subst sc,SC,$2) $(call makemacrodef,-D,$(MMPDEFS))\
 	  $(CPPOPT) $(SOURCE) -o $$@ \
 	  $(call endrule,resourcepreprocess)
     endif
@@ -152,7 +150,7 @@
     CLEANTARGETS:= $$(CLEANTARGETS) $1
 
     ifeq "$(MAKEFILE_GROUP)" "RESOURCE"
-    ifeq "$1" "$4"
+    ifeq "$1" "$3"
       $(eval DEPENDFILENAME:=$1.d)
       $(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
       
@@ -183,9 +181,10 @@
 ###############################################################################
 define generateresource
 
-# $(1) is the resource filename e.g. /a/b/resource.rsc
+# $(1) is the intermediate resource filename with path e.g. /a/b/resource.rsc
 # $(2) is the preprocessed resource to make it from
 # $(3) is the language e.g. sc or 01 or 02
+# $(4) is the target resource filename without path
 
 
         ifeq ($(TARGET_$(call sanitise,$1)),)
@@ -211,7 +210,7 @@
 #       targets for the sake of dependencies or, for example, if someone merely adds a new copy 
 #       when the resource is up-to-date
 
-        $(call copyresource,$1,$(sort $(patsubst %,%/$(notdir $1),$(RSCCOPYDIRS))))
+        $(call copyresource,$1,$(sort $(patsubst %,%/$4,$(RSCCOPYDIRS))))
 
 
         # individual source file compilation
@@ -265,10 +264,10 @@
 ifeq ($(HEADERONLY),)
         # generate a resource file for each language
         # For sc we generate $(RESBASE).rsc and define LANGUAGE_SC and LANGUAGE_sc.
-        $(foreach L,$(LANGUAGES:SC=sc),$(eval $(call preprocessresource,$(INTERBASE_TMP)_$(L).rpp,$(INTERBASE).r$(L),$(L),$(PRIMARYRPPFILE))))
+        $(foreach L,$(LANGUAGES:SC=sc),$(eval $(call preprocessresource,$(INTERBASE_TMP)_$(L).rpp,$(L),$(PRIMARYRPPFILE))))
 
         ifeq "$(MAKEFILE_GROUP)" "RESOURCE"
-            $(foreach L,$(LANGUAGES:SC=sc),$(eval $(call generateresource,$(INTERBASE).r$(L),$(INTERBASE_TMP)_$(L).rpp,$(L))))
+            $(foreach L,$(LANGUAGES:SC=sc),$(eval $(call generateresource,$(INTERBASE_TMP).r$(L),$(INTERBASE_TMP)_$(L).rpp,$(L),$(TARGET_lower).r$(L))))
         endif
 else
         # No resources are going to be made so unless we specifically ask for it, there will be no
--- a/sbsv2/raptor/lib/flm/standard.xml	Wed May 19 14:17:41 2010 +0100
+++ b/sbsv2/raptor/lib/flm/standard.xml	Thu May 27 17:04:53 2010 +0100
@@ -40,6 +40,7 @@
 		<param name='SOURCE' default=''/>
 		<param name='TARGET'/>
 		<param name='TARGET_lower'/>
+		<param name='TARGETPATH' default=''/>
 		<param name='LTCG' default=''/>
 		<param name='LTCG_OPTION' default='--ltcg'/>
 		<param name='TARGETTYPE'/>
--- a/sbsv2/raptor/lib/flm/tracecompiler.mk	Wed May 19 14:17:41 2010 +0100
+++ b/sbsv2/raptor/lib/flm/tracecompiler.mk	Thu May 27 17:04:53 2010 +0100
@@ -71,12 +71,42 @@
 TRACE_HEADERS:=
 
 TRACE_SOURCE_LIST:=$(TRACE_MARKER_PATH)/tracecompile_$(TRACE_RELEASABLE_ID)_$(UID_TC).sourcelist
+TRACE_VARIANT_SOURCE_LIST:=$(OUTPUTPATH)/$(VARIANTPLATFORM)/$(VARIANTTYPE)/tracecompile_$(TRACE_RELEASABLE_ID)_$(UID_TC).sourcelist
 
-# 1. Append to or create the list of source files for trace compiler to process
-# 2. Check if the hash in trace marker remain unchanged. If not, remove marker so trace compiler will run again. 
-X:=$(shell set -x ; $(GNUMKDIR) -p $(TRACE_MARKER_PATH) ; $(GNUTOUCH) $(TRACE_SOURCE_LIST) ; echo -e "$(subst $(CHAR_SPACE),\\n,$(SOURCE))" | $(GNUSORT) -u $(TRACE_SOURCE_LIST) - > $(TRACE_SOURCE_LIST).tmp && $(GNUMV) $(TRACE_SOURCE_LIST).tmp $(TRACE_SOURCE_LIST) ; $(GNUMD5SUM) -c $(TRACE_MARKER) || $(GNURM) $(TRACE_MARKER))
+# The sourcelist_grouped_write macro allows us to construct a source list file, 10 objects at a time
+# to avoid limits on argument lengths and sizes on Windows.
+# $1 = list of source files
+# $2 = ">" or ">>" i.e. for creating the file.
+define sourcelist_grouped_write
+	$(call startrule,sourcelist_write) \
+	$(if $1,echo -en '$(subst $(CHAR_SPACE),\n,$(strip $(wordlist 1,10,$1)))\n' $2 $$@,true) \
+	$(call endrule,sourcelist_write) 
+	$(if $1,$(call sourcelist_grouped_write,$(wordlist 11,$(words $1),$1),>>),)
+endef
 
-$(if $(FLMDEBUG),$(info <debug>Trace Compiler sourcelist generation output: $(X)</debug>))
+# Write the list of sources for this variant to a file
+# Make the combined sourcelist for this target depend on it
+# It's all to do with how make treats this file when it 
+# does exist. We are forcing it evaluate the target rule here 
+# even if the file is in place by making it PHONY. In other 
+# words, this is forcing the variant source list to always 
+# be written but later on we might not write to the combined 
+# source list if it isn't going to change.
+define sourcelist_write
+$(TRACE_SOURCE_LIST): $(TRACE_VARIANT_SOURCE_LIST)
+
+.PHONY:: $(TRACE_VARIANT_SOURCE_LIST)
+
+$(TRACE_VARIANT_SOURCE_LIST): $(SOURCE) 
+	$(call sourcelist_grouped_write,$(SOURCE),>)
+
+endef
+
+$(eval $(sourcelist_write))
+$(eval $(call GenerateStandardCleanTarget,$(TRACE_VARIANT_SOURCE_LIST),,))
+
+
+$(if $(FLMDEBUG),$(info <debug>Trace Compiler SOURCES: $(SOURCE)</debug>))
 
 $(TRACE_MARKER) : $(SOURCE)
 
@@ -116,14 +146,33 @@
 endif
 $(if $(FLMDEBUG),$(info <debug>TRACE_VSTR=$(TRACE_VSTR) TRACE_VER=$(TRACE_VER)</debug>))
 
+
+# 0. Generate a combined sourcelist from all variants. 
+# 0.1 Write the combined list to a temporary file
+# 0.2 Check if there are new files since the last build
+#      md5 stored in the trace marker.
+# 0.3 Rewrite the combined sourcelist if new sourcefiles have appeared
+#      since the last build
+# 1. Use pipe to send inputs to trace compiler to process
+# 2. Create a hash regarding to source names and put it in marker.
+# 3. Show source names that are processed by trace compiler
+
 ifeq ($(TRACE_VER),new)
 define trace_compile
-$(TRACE_MARKER) : $(PROJECT_META)
+
+$(TRACE_SOURCE_LIST):
+	$(call startrule,sourcelist_combine) \
+	$(GNUCAT) $(TRACE_SOURCE_LIST) $$^ 2>/dev/null | $(GNUSORT) -u > $$@.new && \
+	$(GNUMD5SUM) -c $(TRACE_MARKER) 2>/dev/null ||  \
+	  $(GNUCP) $$@.new $$@ \
+	$(call endrule,sourcelist_combine)
+
+$(TRACE_MARKER) : $(PROJECT_META) $(TRACE_SOURCE_LIST)
 	$(call startrule,tracecompile) \
 	( $(GNUCAT) $(TRACE_SOURCE_LIST); \
 	  echo -en "*ENDOFSOURCEFILES*\n" ) | \
 	$(JAVA_COMMAND) $(TRACE_COMPILER_START) $(if $(FLMDEBUG),-d,) --uid=$(UID_TC) --project=$(TRACE_PRJNAME) --mmp=$(PROJECT_META) --traces=$(TRACE_PATH) &&  \
-	$(GNUMD5SUM) $(TRACE_SOURCE_LIST) > $(TRACE_MARKER) && \
+	$(GNUMD5SUM) $(TRACE_SOURCE_LIST).new > $$@ 2>/dev/null && \
 	{ $(GNUTOUCH) $(TRACE_DICTIONARY) $(AUTOGEN_HEADER); \
 	 $(GNUCAT) $(TRACE_SOURCE_LIST) ; true ; } \
 	$(call endrule,tracecompile)
@@ -131,17 +180,23 @@
 
 else # Old inteface
 TRACE_COMPILER_START:=-classpath $(TRACE_COMPILER_PATH)/tracecompiler com.nokia.tracecompiler.TraceCompiler
-# 1. Use pipe to send inputs to trace compiler to process
-# 2. Create a hash regarding to source names and put it in marker.
-# 3. Show source names that are processed by trace compiler
+
 define trace_compile
-$(TRACE_MARKER) : $(PROJECT_META)
+
+$(TRACE_SOURCE_LIST):
+	$(call startrule,sourcelist_combine) \
+	$(GNUCAT) $(TRACE_SOURCE_LIST) $$^ 2>/dev/null | $(GNUSORT) -u > $$@.new && \
+	$(GNUMD5SUM) -c $(TRACE_MARKER) 2>/dev/null ||  \
+	  $(GNUCP) $$@.new $$@ \
+	$(call endrule,sourcelist_combine)
+
+$(TRACE_MARKER) : $(PROJECT_META) $(TRACE_SOURCE_LIST)
 	$(call startrule,tracecompile) \
 	( echo -en "$(OLDTC_TRACE_PRJNAME)\n$(PROJECT_META)\n"; \
 	  $(GNUCAT) $(TRACE_SOURCE_LIST); \
 	  echo -en "*ENDOFSOURCEFILES*\n" ) | \
 	$(JAVA_COMMAND) $(TRACE_COMPILER_START) $(UID_TC) &&  \
-	$(GNUMD5SUM) $(TRACE_SOURCE_LIST) > $(TRACE_MARKER) && \
+	$(GNUMD5SUM) $(TRACE_SOURCE_LIST).new > $$@ 2>/dev/null && \
 	{ $(GNUTOUCH) $(TRACE_DICTIONARY) $(AUTOGEN_HEADER); \
 	 $(GNUCAT) $(TRACE_SOURCE_LIST) ; true ; } \
 	$(call endrule,tracecompile)
--- a/sbsv2/raptor/python/raptor_meta.py	Wed May 19 14:17:41 2010 +0100
+++ b/sbsv2/raptor/python/raptor_meta.py	Thu May 27 17:04:53 2010 +0100
@@ -35,6 +35,7 @@
 from mmpparser import *
 
 import time
+import generic_path
 
 
 PiggyBackedBuildPlatforms = {'ARMV5':['GCCXML']}
@@ -768,9 +769,13 @@
 			biloc="." # Someone building with a relative raptor path
 
 		self.__StandardVariables = {}
-		# Relative step-down to the root - let's try ignoring this for now, as it
-		# should amount to the same thing in a world where absolute paths are king
-		self.__StandardVariables['TO_ROOT'] = ""
+		# The source root directory is SRCROOT if set in the environment
+		# Set TO_ROOT to SRCROOT in case SBS_BUILD_DIR is on a different drive
+		if 'SRCROOT' in os.environ:
+			self.__StandardVariables['TO_ROOT'] = str(generic_path.Path(os.environ['SRCROOT']))
+		else:
+			self.__StandardVariables['TO_ROOT'] = ""
+		
 		# Top-level bld.inf location
 		self.__StandardVariables['TO_BLDINF'] = biloc
 		self.__StandardVariables['EXTENSION_ROOT'] = eiloc
@@ -838,9 +843,12 @@
 			eiloc="." # Someone building with a relative raptor path
 
 		self.__StandardVariables = {}
-		# Relative step-down to the root - let's try ignoring this for now, as it
-		# should amount to the same thing in a world where absolute paths are king
-		self.__StandardVariables['TO_ROOT'] = ""
+		# The source root directory is SRCROOT if set in the environment	
+		# Set TO_ROOT to SRCROOT in case SBS_BUILD_DIR is on a different drive
+		if 'SRCROOT' in os.environ:
+			self.__StandardVariables['TO_ROOT'] = str(generic_path.Path(os.environ['SRCROOT']))
+		else:
+			self.__StandardVariables['TO_ROOT'] = ""
 		# Top-level bld.inf location
 		self.__StandardVariables['TO_BLDINF'] = biloc
 		# Location of bld.inf file containing the current EXTENSION block
@@ -1491,9 +1499,9 @@
 
 				self.__versionhex = "%04x%04x" % (major, minor)
 				self.BuildVariant.AddOperation(raptor_data.Set(varname, "%d.%d" %(major, minor)))
-				self.BuildVariant.AddOperation(raptor_data.Set(varname+"HEX", self.__versionhex))
+				self.BuildVariant.AddOperation(raptor_data.Set("VERSIONHEX", self.__versionhex))
 				self.__debug("Set "+toks[0]+"  OPTION to " + toks[1])
-				self.__debug("Set "+toks[0]+"HEX OPTION to " + "%04x%04x" % (major,minor))
+				self.__debug("Set VERSIONHEX OPTION to " + self.__versionhex)
 
 			else:
 				self.__Raptor.Warn("Invalid version supplied to VERSION (%s), using default value" % toks[1])
@@ -3082,7 +3090,6 @@
 				value = options[option].replace('$(EPOCROOT)', '$(EPOCROOT)/')
 				value = value.replace('$(', '$$$$(')
 				value = value.replace('$/', '/').replace('$;', ':')
-				value = value.replace('$/', '/').replace('$;', ':')
 
 				if customInterface:
 					var.AddOperation(raptor_data.Set(option, value))
--- a/sbsv2/raptor/test/smoke_suite/resource.py	Wed May 19 14:17:41 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/resource.py	Thu May 27 17:04:53 2010 +0100
@@ -62,22 +62,35 @@
 	buildLocation = ReplaceEnvs("$(EPOCROOT)/epoc32/build/") + BldInfFile.outputPathFragment('smoke_suite/test_resources/resource/group/bld.inf')
 	res_depfile= buildLocation+"/dependentresource_/dependentresource_dependentresource_sc.rpp.d"
 
+
 	t.targets = [
-		"$(EPOCROOT)/epoc32/include/testresource.rsg",
-		"$(EPOCROOT)/epoc32/include/testresource.hrh",
+		"$(EPOCROOT)/epoc32/data/z/resource/anotherresource/testresource.r01",
+		"$(EPOCROOT)/epoc32/data/z/resource/anotherresource/testresource.rsc",
+		"$(EPOCROOT)/epoc32/data/z/resource/dependentresource/dependentresource.rsc",
 		"$(EPOCROOT)/epoc32/data/z/resource/testresource/testresource.r01",
 		"$(EPOCROOT)/epoc32/data/z/resource/testresource/testresource.rsc",
+		"$(EPOCROOT)/epoc32/include/testresource.hrh",
+		"$(EPOCROOT)/epoc32/include/testresource.rsg",
 		"$(EPOCROOT)/epoc32/release/armv5/urel/testresource.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/anotherresource/testresource.r01",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/anotherresource/testresource.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/dependentresource/dependentresource.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/anotherresource/testresource.r01",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/anotherresource/testresource.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/dependentresource/dependentresource.rsc",
 		res_depfile
 		]
 
-	t.addbuildtargets('smoke_suite/test_resources/resource/group/bld.inf', [	
-		"testresource_/testresource_testresource_02.rpp",
+	t.addbuildtargets('smoke_suite/test_resources/resource/group/bld.inf', [
+		"dependentresource_/dependentresource_dependentresource.rsc",
+		"testresource_/testresource_dependentresource.r01",
+		"testresource_/testresource_dependentresource.rsc",
 		"testresource_/testresource_testresource_01.rpp",
 		"testresource_/testresource_testresource_01.rpp.d",
+		"testresource_/testresource_testresource_02.rpp",
 		"testresource_/testresource_testresource_sc.rpp"])
 
-	t.command = "sbs -b smoke_suite/test_resources/resource/group/bld.inf  -c armv5_urel reallyclean ; sbs --no-depend-generate -j 16 -b smoke_suite/test_resources/resource/group/bld.inf -c armv5_urel -f ${SBSLOGFILE} -m ${SBSMAKEFILE} && grep 'epoc32.include.testresource.rsg' %s && wc -l %s " % (res_depfile, res_depfile)
+	t.command = "sbs -b smoke_suite/test_resources/resource/group/bld.inf  -c armv5_urel -c winscw_urel reallyclean ; sbs --no-depend-generate -j 16 -b smoke_suite/test_resources/resource/group/bld.inf -c armv5_urel -c  winscw_urel -f ${SBSLOGFILE} -m ${SBSMAKEFILE} && grep 'epoc32.include.testresource.rsg' %s && { X=`md5sum $(EPOCROOT)/epoc32/release/winscw/urel/z/resource/anotherresource/testresource.rsc` && Y=`md5sum $(EPOCROOT)/epoc32/data/z/resource/testresource/testresource.rsc` && [ \"${X%% *}\" != \"${Y%% *}\" ] ; }  && wc -l %s " % (res_depfile, res_depfile)
 
 	t.mustnotmatch = []
 
--- a/sbsv2/raptor/test/smoke_suite/test_resources/resource/group/testresource.mmp	Wed May 19 14:17:41 2010 +0100
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/group/testresource.mmp	Thu May 27 17:04:53 2010 +0100
@@ -58,10 +58,18 @@
 LANG sc
 END
 
+// Looks like testresource but comes from another resource file
+START RESOURCE          dependentresource.rss
+TARGET 			testresource.rsc
+TARGETPATH              resource/anotherresource
+LANG SC 01
+END
+
 START BITMAP	testresource.mbm
 HEADER
-
 TARGETPATH		resource/apps
 SOURCEPATH		../aifsrccl
 SOURCE			c8,1 DEF24.BMP DEF2M.BMP
 END
+
+
--- a/sbsv2/raptor/test/unit_suite/raptor_meta_unit.py	Wed May 19 14:17:41 2010 +0100
+++ b/sbsv2/raptor/test/unit_suite/raptor_meta_unit.py	Thu May 27 17:04:53 2010 +0100
@@ -494,15 +494,21 @@
 				self.assertTrue(testOptions.has_key(testParameter))
 				self.assertEquals(testOptions.get(testParameter), aTestParameters.get(testParameter))
 
+
 	def testBldInfExtensions(self):
 		bldInfTestRoot = self.__testRoot.Append('metadata/project/bld.infs')
 		bldInfMakefilePathTestRoot = str(self.__makefilePathTestRoot)+'/metadata/project/bld.infs'			
+		if 'SRCROOT' in os.environ:
+			srcroot = os.environ['SRCROOT']
+		else:
+			srcroot = os.environ['SRCROOT'] = "x:/somesrcroot"
+		
 		depfiles = []
 		bldInfObject = raptor_meta.BldInfFile(bldInfTestRoot.Append('extensions.inf'),
 											  self.__gnucpp, depfiles=depfiles, log=self.raptor)
 		
 		extensions = bldInfObject.getExtensions(self.ARMV5)
-		
+				
 		self.__testExtension(extensions[0],
 							'test/dummyextension1.mk',
 							{'TARGET':'dummyoutput1.exe',
@@ -511,7 +517,7 @@
 							'TOOL':'dummytool1.exe',
 							'OPTION11':'option11value',
 							'OPTION12':'$(MAKE_VAR)',
-							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_ROOT':srcroot,
 							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
 							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}		
 							)
@@ -524,7 +530,7 @@
 							'TOOL':'dummytool2.exe',
 							'OPTION21':'option21value',
 							'OPTION22':'$(MAKE_VAR)',
-							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_ROOT':srcroot,
 							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
 							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}
 							)
@@ -537,7 +543,7 @@
 							'TOOL':'dummytool3.exe',
 							'OPTION31':'option31value',
 							'OPTION32':'$(MAKE_VAR)',
-							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_ROOT':srcroot,
 							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
 							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}
 							)
@@ -552,7 +558,7 @@
 							'TOOL':'dummytesttool1.exe',
 							'OPTIONTEST11':'optiontest11value',
 							'OPTIONTEST12':'$(MAKE_VAR)',
-							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_ROOT':srcroot,
 							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
 							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}		
 							)
@@ -565,7 +571,7 @@
 							'TOOL':'dummytesttool2.exe',
 							'OPTIONTEST21':'optiontest21value',
 							'OPTIONTEST22':'$(MAKE_VAR)',
-							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_ROOT':srcroot,
 							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
 							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}		
 							)