catchup wip
authortnmurphy@4GBL06592.nokia.com
Fri, 20 Nov 2009 21:17:53 +0000
branchwip
changeset 12 2cfea3290625
parent 11 ea23b18a2ff6 (current diff)
parent 9 b211d87c390a (diff)
child 13 8789c7c7c420
catchup
sbsv2/raptor/lib/flm/build.flm
sbsv2/raptor/python/raptor.py
sbsv2/raptor/python/raptor_meta.py
--- a/sbsv2/raptor/RELEASE-NOTES.txt	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/RELEASE-NOTES.txt	Fri Nov 20 21:17:53 2009 +0000
@@ -1,6 +1,20 @@
 
 Release Notes for Symbian Build System v2
 
+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:
--- a/sbsv2/raptor/lib/config/arm.xml	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/lib/config/arm.xml	Fri Nov 20 21:17:53 2009 +0000
@@ -65,6 +65,7 @@
 		<set name="PLATMACROS.CONFIG" value=""/>
 		<set name="PLATMACROS.VAR" value=""/>
 		<set name="PLATMACROS.TOOLCHAIN" value=""/>
+		<set name="POSTLINKER_COMPRESSION_DEFAULT" value="inflate"/>		
 	</var>
 	<var name="v5">
 		<set name="TRADITIONAL_PLATFORM" value="ARMV5"/>
@@ -72,7 +73,8 @@
 		<set name="DEBUG_FORMAT" value="$(CC.DWARF2)"/>
 		<set name="TARGET_ARCH_OPTION" value="$(CC.ARMV5)"/>
 		<set name="LINKER_ARCH_OPTION" value="$(LD.ARMV5)"/>
-		<set name="ARMFPU" value="$(CC.SOFTVFP_MAYBE_VFPV2)"/>
+		<set name="COMPILER_FPU_DEFAULT" value="$(CC.SOFTVFP_MAYBE_VFPV2)"/>
+		<set name="POSTLINKER_FPU_DEFAULT" value="$(PL.SOFTVFP_MAYBE_VFPV2)"/>
 		<set name="GENERATE_ABIV1_IMPLIBS" value="$(SUPPORTS_ABIV1_IMPLIBS)"/>
 	</var>
 	<var name="v6">
@@ -84,7 +86,8 @@
 		<set name="TARGET_ARCH_OPTION" value="$(CC.ARMV6)"/>
 		<set name="LINKER_ARCH_OPTION" value="$(LD.ARMV6)"/>
 		<set name="STATIC_RUNTIME_DIR" value="$(EPOCROOT)/epoc32/release/armv5/$(VARIANTTYPE)"/>
-		<set name="ARMFPU" value="$(CC.SOFTVFP_MAYBE_VFPV2)"/>
+		<set name="COMPILER_FPU_DEFAULT" value="$(CC.SOFTVFP_MAYBE_VFPV2)"/>
+		<set name="POSTLINKER_FPU_DEFAULT" value="$(PL.SOFTVFP_MAYBE_VFPV2)"/>
 	</var>
 	<var name="v7">
 		<set name="TRADITIONAL_PLATFORM" value="ARMV7"/>
@@ -94,7 +97,8 @@
 		<set name="DEBUG_FORMAT" value="$(CC.DWARF3)"/>
 		<set name="TARGET_ARCH_OPTION" value="$(CC.ARMV7)"/>
 		<set name="LINKER_ARCH_OPTION" value="$(LD.ARMV7)"/>
-		<set name="ARMFPU" value="$(CC.SOFTVFP_MAYBE_VFPV3)"/>
+		<set name="COMPILER_FPU_DEFAULT" value="$(CC.SOFTVFP_MAYBE_VFPV3)"/>
+		<set name="POSTLINKER_FPU_DEFAULT" value="$(PL.SOFTVFP_MAYBE_VFPV3)"/>
 	</var>
 	<var name="9e" extends="v5">
 		<set name="VARIANTPLATFORM" value="arm9e"/>
--- a/sbsv2/raptor/lib/config/gcce.xml	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/lib/config/gcce.xml	Fri Nov 20 21:17:53 2009 +0000
@@ -57,8 +57,8 @@
 		<append name="CDEFS" value='__SUPPORT_CPP_EXCEPTIONS__ _UNICODE __SYMBIAN32__ __GCCE__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE__="$(PRODUCT_INCLUDE)" $(MMPDEFS) $(ARMMACROS)'/>
 		<!-- Note that the intention of ABLD for CIA compilation seems to be "-S -Wa,-adln", although this doesn't work -->
 		<set name="COMPILER_CIA_FLAGS" value="-marm"/>
-		<set name="COMPILER_DEFINES" value="-D__GCCE__"/>
-		<set name="COMPILER_FPU_FLAGS" value="$(CC.OPT.SOFTVFP_MAYBE_VFPV2)$(CC.VAL.SOFTVFP_MAYBE_VFPV2)"/>		
+		<set name="COMPILER_DEFINES" value="-D__GCCE__"/>		
+		<set name="COMPILER_FPU_OPTION" value="-mfloat-abi="/>		
 		<set name="COMPILER_INTERWORK_DEFINES" value="__MARM_INTERWORK__"/>
 		<set name="COMPILER_SYSTEM_INCLUDE_OPTION" value="-I"/>
 		<set name="COMPILER_THUMB_DEFINES" value="__MARM_THUMB__"/>
--- a/sbsv2/raptor/lib/config/rvct.xml	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/lib/config/rvct.xml	Fri Nov 20 21:17:53 2009 +0000
@@ -54,7 +54,7 @@
 		<set name="CIADEFS" value="__CIA__"/>
 		<append name="CDEFS" value='__SUPPORT_CPP_EXCEPTIONS__ _UNICODE __SYMBIAN32__ __ARMCC__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE__="$(PRODUCT_INCLUDE)" $(MMPDEFS) $(ARMMACROS)'/>
 		<set name="COMPILER_CIA_FLAGS" value=""/>
-		<set name="COMPILER_FPU_FLAGS" value="--fpu $(ARMFPU)"/>	
+		<set name="COMPILER_FPU_OPTION" value="--fpu "/>
 		<set name="COMPILER_DEFINES" value=""/>
 		<set name="COMPILER_INTERWORK_DEFINES" value="__MARM_INTERWORK__"/>
 		<set name="COMPILER_SYSTEM_INCLUDE_OPTION" value="-J"/>
--- a/sbsv2/raptor/lib/config/variants.xml	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/lib/config/variants.xml	Fri Nov 20 21:17:53 2009 +0000
@@ -86,13 +86,12 @@
 		<set name="STATIC_LIBS_LIST" value=""/>
 		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct3_1.dso drtrvct3_1.dso"/>
 		<set name="ARMLIBS" value=""/>
-		<set name="CC.OPT.SOFTVFP_MAYBE_VFPV2" value="-m"/>
-		<set name="CC.VAL.SOFTVFP_MAYBE_VFPV2" value="soft-float"/>
+		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="soft"/>
+		<set name="PL.SOFTVFP_MAYBE_VFPV2" value="softvfp"/>
 		<set name="CC.ARMV5" value="-march=armv5t"/>
 		<set name="RELOCATABLE_IMAGE_OPTION" value=""/>
 		<set name="RVCTLIB" value=""/>
 		<set name="CC.NO_UNALIGNED_ACCESS" value=""/>
-		<set name="CC.SOFTVFP_MAYBE_VFPV2" value=""/>
 		<set name="SPLIT_OPTION" value=""/>
 		<set name="NEED_ENTRYPOINT_LIBRARY" value=""/>
 		<set name="RVCTBIN" value="" />
@@ -101,29 +100,9 @@
 		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt3_1.lib"/>
 		<set name="NEED_ENTRYPOINT_LIBRARY" value="" />
 	</var>
-	
-    <var name="gcce4_3_3" extends="gcce_base">
-		<env name="GCCEBIN" type="path" />
-		<env name="GCCEVERSION" default="$(TOOLCHAINVERSION)" />
+
+	<var name="gcce4_3_3" extends="gcce4_3_2">
 		<set name="TOOLCHAINVERSION" value="4.3.3" />
-		<set name="OWN_LIBRARY_OPTION" value=""/>
-		<set name="STATIC_LIBS_LIST" value=""/>
-		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct3_1.dso drtrvct3_1.dso"/>
-		<set name="ARMLIBS" value=""/>
-		<set name="CC.OPT.SOFTVFP_MAYBE_VFPV2" value="-m"/>
-		<set name="CC.VAL.SOFTVFP_MAYBE_VFPV2" value="soft-float"/>
-		<set name="CC.ARMV5" value="-march=armv5t"/>
-		<set name="RELOCATABLE_IMAGE_OPTION" value=""/>
-		<set name="RVCTLIB" value=""/>
-		<set name="CC.NO_UNALIGNED_ACCESS" value=""/>
-		<set name="CC.SOFTVFP_MAYBE_VFPV2" value=""/>
-		<set name="SPLIT_OPTION" value=""/>
-		<set name="NEED_ENTRYPOINT_LIBRARY" value=""/>
-		<set name="RVCTBIN" value="" />
-		<set name="RVCTINC" value="" />
-		<set name="USER_STATIC_RUNTIME_LIB" value="usrt3_1.lib"/>
-		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt3_1.lib"/>
-		<set name="NEED_ENTRYPOINT_LIBRARY" value="" />
 	</var>
 	
 	<var name="gcce4_4_1" extends="gcce4_3_3">
@@ -153,6 +132,7 @@
 		<set name="NEED_ENTRYPOINT_LIBRARY" value="False"/>
 		<set name="CC.NO_UNALIGNED_ACCESS" value="--memaccess -UL41"/>
 		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="softvfp"/>
+		<set name="PL.SOFTVFP_MAYBE_VFPV2" value="softvfp"/>
 		<set name="CC.ARMV5" value="--cpu 5T"/>
 		<set name="CC.ARMV6" value="--cpu 6"/>
 	</var>
@@ -179,7 +159,9 @@
 		<set name="NEED_ENTRYPOINT_LIBRARY" value="True"/>
 		<set name="CC.NO_UNALIGNED_ACCESS" value="--no_unaligned_access"/>
 		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="softvfp"/>
+		<set name="PL.SOFTVFP_MAYBE_VFPV2" value="softvfp"/>
 		<set name="CC.SOFTVFP_MAYBE_VFPV3" value="softvfp"/>
+		<set name="PL.SOFTVFP_MAYBE_VFPV3" value="softvfp"/>
 		<set name="CC.ARMV5" value="--cpu 5TE"/>
 		<set name="CC.ARMV6" value="--cpu 6"/>
 		<set name="CC.ARMV7" value="--cpu 7-A"/>
@@ -208,7 +190,10 @@
 		<set name="NEED_ENTRYPOINT_LIBRARY" value="True"/>
 		<set name="CC.NO_UNALIGNED_ACCESS" value="--no_unaligned_access"/>
 		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="softvfp+vfpv2"/>
+		<set name="PL.SOFTVFP_MAYBE_VFPV2" value="vfpv2"/>
 		<set name="CC.SOFTVFP_MAYBE_VFPV3" value="softvfp+vfpv3"/>
+		<!-- Not supported yet : <set name="PL.SOFTVFP_MAYBE_VFPV3" value="vfpv3"/> -->
+		<set name="PL.SOFTVFP_MAYBE_VFPV3" value="vfpv2"/>
 		<set name="CC.ARMV5" value="--cpu 5TE"/>
 		<set name="CC.ARMV6" value="--cpu 6"/>
 		<set name="CC.ARMV7" value="--cpu 7-A"/>
--- a/sbsv2/raptor/lib/flm/e32abiv2.flm	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2.flm	Fri Nov 20 21:17:53 2009 +0000
@@ -644,7 +644,7 @@
   $(EXPORT_VTBL_OPTION) $(NO_UNALIGNED_ACCESS) $(VFE_OPTION) $(AAPCS_OPTION) \
   $(CPPONLYOPTION) $(INSTRUCTION_SET) \
   $(if $(ALWAYS_BUILD_AS_ARM),$(ARM_INSTRUCTION_SET),$(THUMB_INSTRUCTION_SET) $(call makemacrodef,-D,$(COMPILER_THUMB_DEFINES))) \
-  $(COMPILER_FPU_FLAGS)
+  $(COMPILER_FPU_OPTION)$(if $(ARMFPU),$(ARMFPU),$(COMPILER_FPU_DEFAULT))
 
 ## COMPILE CPP Files #################################################################
 
@@ -663,7 +663,7 @@
   $(EXPORT_VTBL_OPTION) $(NO_UNALIGNED_ACCESS) $(VFE_OPTION) $(AAPCS_OPTION) \
   $(COMPILE_ONLY_OPTION) $(INSTRUCTION_SET) \
   $(if $(ALWAYS_BUILD_AS_ARM),$(ARM_INSTRUCTION_SET),$(THUMB_INSTRUCTION_SET) $(call makemacrodef,-D,$(COMPILER_THUMB_DEFINES))) \
-  $(COMPILER_FPU_FLAGS)
+  $(COMPILER_FPU_OPTION)$(if $(ARMFPU),$(ARMFPU),$(COMPILER_FPU_DEFAULT))
 
 ifeq ($(STDCPP),1)
 SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(STDCPP_INCLUDE)))
--- a/sbsv2/raptor/lib/flm/e32abiv2defaults.mk	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2defaults.mk	Fri Nov 20 21:17:53 2009 +0000
@@ -89,3 +89,9 @@
   OPTION_COMPILER:=$(OPTION_ARMCC)
   OPTION_REPLACE_COMPILER:=$(OPTION_REPLACE_ARMCC)
 endif
+
+# "ARMFPU" overrides for 'fpu-ness' in compiler and postlinker calls in .mmp files are currently only
+# supported for RVCT-based builds, GCCE builds always make use of the interface defined defaults.
+ifeq ($(TOOLCHAIN),GCCE)
+  ARMFPU:=
+endif
--- a/sbsv2/raptor/lib/flm/e32postlink.mk	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32postlink.mk	Fri Nov 20 21:17:53 2009 +0000
@@ -20,9 +20,11 @@
 #
 #  Metadata supplied (or deduced from)
 #
-#   BYTEPAIRCOMPRESS
+#   ARMFPU
+#   BYTEPAIRCOMPRESSTARGET
 #   CAPABILITY
-#   DEBUGGABLE                     Can be "udeb" or "urel" or "udeb urel" or ""
+#   COMPRESSTARGET                    Not directly referenced, at least with the current approach to compression keywords
+#   DEBUGGABLE                        Can be "udeb" or "urel" or "udeb urel" or ""
 #   E32TARGET
 #   EPOCALLOWDLLDATA
 #   EPOCFIXEDPROCESS
@@ -31,8 +33,8 @@
 #   EPOCPROCESSPRIORITY
 #   EPOCSTACKSIZE
 #   EXPORTUNFROZEN
-#   INFLATECOMPRESS
-#   POSTLINKFPU
+#   INFLATECOMPRESSTARGET
+#   NOCOMPRESSTARGET
 #   POSTLINKTARGETTYPE
 #   SID
 #   SMPSAFE
@@ -44,12 +46,12 @@
 #  Other
 #
 #   ARMLIBS
-#   AUTOEXPORTS                    Symbols that must be assumed to exist for this TARGETTYPE in the format: export,ordinal;export,ordinal;..
-#   CANIGNORENONCALLABLE           If the TARGETTYPE allows it, disregard non-callable exports (v-tables, type information, etc.)
+#   AUTOEXPORTS                       Symbols that must be assumed to exist for this TARGETTYPE in the format: export,ordinal;export,ordinal;..
+#   CANIGNORENONCALLABLE              If the TARGETTYPE allows it, disregard non-callable exports (v-tables, type information, etc.)
 #   CANHAVEEXPORTS
 #   CLEANTARGETS
 #   ELF2E32
-#   EPOCDATALINKADDRESS            Redundant?
+#   EPOCDATALINKADDRESS               Redundant?
 #   EPOCROOT
 #   EXPTARGET
 #   GENERATED_DEFFILE
@@ -58,10 +60,12 @@
 #   IMPORTLIBRARYREQUIRED
 #   INTERMEDIATEPATH
 #   LINKASVERSIONED
-#   LINK_TARGET                    Postlinker elf input
+#   LINK_TARGET                       Postlinker elf input
 #   NAMEDSYMLKUP
 #   PAGEDCODE_OPTION
 #   POSTLINKDEFFILE
+#   POSTLINKER_COMPRESSION_DEFAULT    Default compression when either COMPRESSTARGET or no compression .mmp keyword is used
+#   POSTLINKER_FPU_DEFAULT
 #   POSTLINKER_SUPPORTS_WDP
 #   RUNTIME_LIBS_PATH
 #   SAVESPACE
@@ -93,7 +97,7 @@
 	  --version=$(VERSION) \
 	  --capability=$(FINAL_CAPABILITIES) \
 	  --linkas=$(call dblquote,$(LINKASVERSIONED)) \
-	  --fpu=$(POSTLINKFPU) \
+	  --fpu=$(if $(ARMFPU),$(ARMFPU),$(POSTLINKER_FPU_DEFAULT)) \
 	  --targettype=$(POSTLINKTARGETTYPE) \
 	  --output=$$(call dblquote,$$@) \
 	  --elfinput=$(call dblquote,$(LINK_TARGET)) \
@@ -121,11 +125,12 @@
 	  $(if $(POSTLINKER_SUPPORTS_WDP), \
 	    --codepaging=$(PAGEDCODE_OPTION) --datapaging=$(PAGEDDATA_OPTION), \
 	    $(POSTLINKER_PAGEDOPTION)) \
-	  $(if $(NOCOMPRESSTARGET), \
-	    --uncompressed, \
-	    $(if $(INFLATECOMPRESS),--compressionmethod inflate,$(if $(BYTEPAIRCOMPRESS),--compressionmethod bytepair,))) \
+	  $(if $(NOCOMPRESSTARGET),--uncompressed, \
+	    $(if $(INFLATECOMPRESSTARGET),--compressionmethod=inflate, \
+	      $(if $(BYTEPAIRCOMPRESSTARGET),--compressionmethod=bytepair, \
+	        --compressionmethod=$(POSTLINKER_COMPRESSION_DEFAULT)))) \
 	  --libpath="$(call concat,$(PATHSEP)$(CHAR_SEMIC),$(strip $(RUNTIME_LIBS_PATH) $(STATIC_LIBS_PATH)))" \
-	  $(if $(SAVESPACE),$(if $(EXPORTUNFROZEN),,;$(GNURM) -rf $(INTERMEDIATEPATH); true)) \
+	  $(if $(SAVESPACE),$(if $(EXPORTUNFROZEN),,&& { $(GNURM) -rf $(INTERMEDIATEPATH); true; })) \
 	$(call endrule,postlink)
 endef
 $(eval $(e32postlink))
--- a/sbsv2/raptor/lib/flm/standard.xml	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/lib/flm/standard.xml	Fri Nov 20 21:17:53 2009 +0000
@@ -5,11 +5,12 @@
 		<param name='ALWAYS_BUILD_AS_ARM' default=''/>
 		<param name='SET_ARMINC' default=''/>
 		<param name='ARMLIBS' default=''/>
-		<param name='ARMFPU' default='softvfp'/>
-		<param name='POSTLINKFPU' default='softvfp'/>
+		<param name='ARMFPU' default=''/>
 		<param name='ARMRT' default=''/>
+		<param name='BYTEPAIRCOMPRESSTARGET' default=''/>
 		<param name='TESTPATH' default=''/>
 		<param name='CAPABILITY'/>
+		<param name='COMPRESSTARGET' default=''/>
 		<param name='CPPONLYOPTION' default='-E'/>
 		<param name='LIBRARY'/>
 		<param name='LIBRARY_DEBUG'/>
@@ -20,6 +21,7 @@
 		<param name='EXPORTUNFROZEN' default=''/>
 		<param name='FEEDBACK_OPTION' default='--feedback=' />
 		<param name='FIRSTLIB' default=''/>
+		<param name='INFLATECOMPRESSTARGET' default=''/>
 		<param name='LINKEROPTION_ARMCC' default=''/>
 		<param name='LISTING_OPTION' default='-S'/>
 		<param name='MMPDEFS' default=''/>
@@ -91,8 +93,9 @@
 		<param name='CFLAGS'/>
 		<param name='COMMANDFILE_OPTION'/>
 		<param name='COMPILE_ONLY_OPTION'/>
+		<param name='COMPILER_FPU_DEFAULT'/>
+		<param name='COMPILER_FPU_OPTION'/>
 		<param name='COMPILER_CIA_FLAGS'/>
-		<param name='COMPILER_FPU_FLAGS'/>
 		<param name='COMPILER_INTERWORK_DEFINES'/>
 		<param name='COMPILER_SYSTEM_INCLUDE_OPTION'/>
 		<param name='COMPILER_THUMB_DEFINES'/>
@@ -144,6 +147,8 @@
 		<param name='PERL'/>
 		<param name='PERTURBSTARTTIME'/>
 		<param name='PERTURBMSECS' default='500'/>
+		<param name='POSTLINKER_COMPRESSION_DEFAULT'/>
+		<param name='POSTLINKER_FPU_DEFAULT'/>
 		<param name='PREPDEF'/>
 		<param name='PREINCLUDE'/>
 		<param name='PREINCLUDE_OPTION'/>
--- a/sbsv2/raptor/lib/flm/win32.flm	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32.flm	Fri Nov 20 21:17:53 2009 +0000
@@ -243,7 +243,6 @@
 ifeq ($(SUPPORTS_IMPORT_LIBRARY),1)
   ifneq ($(NOEXPORTLIBRARY),1)
     ifneq ($(TARGET_$(call sanitise,$(IMPORTLIBTARGET))),1)
-      CLEANTARGETS:=$(CLEANTARGETS) $(if $(or $(EXPORTUNFROZEN),$(DEFFILE)),$(IMPORTLIBTARGET))
       RELEASABLES:=$(RELEASABLES) $(if $(or $(EXPORTUNFROZEN),$(DEFFILE)),$(IMPORTLIBTARGET))
 
       # import libraries are generated to the UDEB release directory
@@ -290,7 +289,6 @@
     BINTARGETSTATICLINK:=$(BINDIRSTATICLINK)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
   endif
 
-  CLEANTARGETS:=$(CLEANTARGETS) $(BINTARGET) $(BINTARGETSTATICLINK)
   RELEASABLES:=$(RELEASABLES) $(BINTARGET) $(BINTARGETSTATICLINK)
 
   # work on a local source files list
@@ -463,7 +461,6 @@
       # link map file (urel only)
       ifeq ($(VARIANTTYPE),urel)
         MAP:=$(OPT.MAP)$(BINTARGET).map
-        CLEANTARGETS:=$(CLEANTARGETS) $(BINTARGET).map
         RELEASABLES:=$(RELEASABLES) $(BINTARGET).map
       endif
     endif
@@ -677,12 +674,11 @@
   BATCHFILE_CREATED_$(BATCHDIR)$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH):=1
   TARGET_CREATED_$(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)_$(TARGET):=1
   RELEASABLES:=$(RELEASABLES) $(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)
-  CLEANTARGETS:=$(CLEANTARGETS) $(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)
 endif
 
 # clean up
-$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(CREATABLEPATHS),))
+$(call raptor_clean,$(CLEANTARGETS))
 # make the output directories while reading makefile - some build engines prefer this
 $(call makepath,$(CREATABLEPATHS))
-# for the abld -what target
-$(eval $(call whatmacro,$(RELEASABLES),WHATWINSCW))
+# for the --what option and the log file
+$(call raptor_release,$(RELEASABLES))
--- a/sbsv2/raptor/python/filter_interface.py	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/python/filter_interface.py	Fri Nov 20 21:17:53 2009 +0000
@@ -33,6 +33,8 @@
 	def formatError(self, message):
 		return "sbs: error: " + message + "\n"
 		
+	def formatWarning(self, message):
+		return "sbs: warning: " + message + "\n"	
 
 import sys
 import xml.sax
--- a/sbsv2/raptor/python/mmpparser.py	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/python/mmpparser.py	Fri Nov 20 21:17:53 2009 +0000
@@ -71,6 +71,7 @@
 		self.assignment = \
 			( \
 			Line(CaselessKeyword('ARMFPU') + String()) ^ \
+			Line(CaselessKeyword('APPLY') + String()) ^ \
 			Line(CaselessKeyword('ASSPLIBRARY') + StringList()) ^ \
 			Line(CaselessKeyword('CAPABILITY') + StringList()) ^ \
 			Line(CaselessKeyword('DOCUMENT') + StringList()) ^ \
--- a/sbsv2/raptor/python/plugins/filter_what.py	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/python/plugins/filter_what.py	Fri Nov 20 21:17:53 2009 +0000
@@ -41,6 +41,8 @@
 		else:
 			self.outfile.write(filename+"\n")
 
+		self.prints += 1
+		
 
 	def open(self, build_parameters):
 		"initialise"
@@ -78,6 +80,7 @@
 		"Regex for zip exports"
 		self.zip_export_regex = re.compile("^<member>.*")
 		
+		self.prints = 0
 		self.ok = True		
 		return self.ok
 	
@@ -87,6 +90,17 @@
 		for line in text.splitlines():
 			line = line.rstrip()
 			
+			# we are normally the ONLY filter running so we have to pass on
+			# any errors and warnings that emerge
+			#
+			if line.startswith("<error"):
+				sys.stderr.write(self.formatError(line))
+				self.ok = False
+				continue
+			if line.startswith("<warning"):
+				sys.stderr.write(self.formatWarning(line))
+				continue
+				
 			if not line in self.repetitions:
 				self.repetitions[line] = 0
 				
@@ -120,6 +134,17 @@
 				
 		return self.ok
 	
+	def summary(self):
+		if self.prints == 0:
+			if self.what:
+				message = "no WHAT information found"
+			else:
+				message = "no CHECK information found"
+				
+			sys.stderr.write(self.formatError(message))
+			self.ok = False
+		return self.ok
+		
 	def close(self):
 		if self.outfile_close:
 			self.outfile.close()
--- a/sbsv2/raptor/python/raptor.py	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/python/raptor.py	Fri Nov 20 21:17:53 2009 +0000
@@ -1050,7 +1050,7 @@
 		except Exception,e:
 			self.out = sys.stdout # make sure that we can actually get errors out.
 			self.logOpen = False
-			self.FatalError("<error>Unable to open the output logs: %s" % str(e))
+			self.FatalError("Unable to open the output logs: %s" % str(e))
 
 	def CloseLog(self):
 		if self.logOpen:
--- a/sbsv2/raptor/python/raptor_meta.py	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/python/raptor_meta.py	Fri Nov 20 21:17:53 2009 +0000
@@ -1214,6 +1214,7 @@
 		self.__Raptor = aRaptor
 		self.__debug("-----+++++ %s " % aMmpfilename)
 		self.BuildVariant = raptor_data.Variant(name = "mmp")
+		self.ApplyVariants = []
 		self.ResourceVariants = []
 		self.BitmapVariants = []
 		self.StringTableVariants = []
@@ -1227,9 +1228,10 @@
 		self.__systeminclude = ""
 		self.__bitmapSourcepath = self.__sourcepath
 		self.__current_resource = ""
+		self.__resourceFiles = []
 		self.__pageConflict = []
 		self.__debuggable = ""
-		self.__resourceFiles = []
+		self.__compressionKeyword = ""
 		self.sources = []
 		self.capabilities = []
 
@@ -1357,6 +1359,14 @@
 		elif varname == 'FEATUREVARIANT':
 			self.BuildVariant.AddOperation(raptor_data.Set(varname,"1"))
 			self.featureVariant = True
+		elif varname in ['COMPRESSTARGET', 'NOCOMPRESSTARGET', 'INFLATECOMPRESSTARGET', 'BYTEPAIRCOMPRESSTARGET']:
+			if self.__compressionKeyword:
+				self.__Raptor.Warn("%s keyword in %s overrides earlier use of %s" % (varname, self.__currentMmpFile, self.__compressionKeyword))
+				self.BuildVariant.AddOperation(raptor_data.Set(self.__compressionKeyword,""))
+				self.__debug( "Set switch " + varname + " OFF")
+			self.BuildVariant.AddOperation(raptor_data.Set(varname,"1"))
+			self.__debug( "Set switch " + varname + " ON")
+			self.__compressionKeyword = varname
 		else:
 			self.__debug( "Set switch "+toks[0]+" ON")
 			self.BuildVariant.AddOperation(raptor_data.Set(prefix+varname, "1"))
@@ -1537,7 +1547,8 @@
 					toks1 = re.sub("[,'\[\]]", "", toks1).replace("//","/")
 				self.__debug("Set "+toks[0]+" to " + toks1)
 				self.BuildVariant.AddOperation(raptor_data.Set(varname,toks1))
-
+		elif varname=='APPLY':
+			self.ApplyVariants.append(toks[1])
 		else:
 			self.__debug("Set "+toks[0]+" to " + str(toks[1]))
 			self.BuildVariant.AddOperation(raptor_data.Set(varname,"".join(toks[1])))
@@ -3155,6 +3166,16 @@
 			# now we have something worth adding to the component
 			mmpSpec.AddVariant(var)
 			componentNode.AddChild(mmpSpec)
+			
+			# if there are APPLY variants then add them to the mmpSpec too
+			for applyVar in backend.ApplyVariants:
+				try:
+					mmpSpec.AddVariant(self.__Raptor.cache.FindNamedVariant(applyVar))
+				except KeyError:
+					self.__Raptor.Error("APPLY unknown variant '%s' in %s",
+								        applyVar,
+								        str(mmpFileEntry.filename),
+								        bldinf=str(bldInfFile))
 
 			# resources, stringtables and bitmaps are sub-nodes of this project
 			# (do not add these for feature variant builds)
--- a/sbsv2/raptor/python/raptor_version.py	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/python/raptor_version.py	Fri Nov 20 21:17:53 2009 +0000
@@ -15,7 +15,7 @@
 # raptor version information module
 #
 
-version=(2,11,0,"2009-11-16","pp-preview")
+version=(2,11,0,"2009-11-23","symbian build system")
 
 def numericversion():
 	"""Raptor version string"""
--- a/sbsv2/raptor/test/common/raptor_tests.py	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/test/common/raptor_tests.py	Fri Nov 20 21:17:53 2009 +0000
@@ -115,28 +115,24 @@
 	This method walks through epocroot and cleans every file and folder that is
 	not present in the manifest file
 	"""
+	print "Cleaning Epocroot..."
 	all_files = {} # dictionary to hold all files
 	folders = [] # holds all unique folders in manifest
+	host_platform = os.environ["HOSTPLATFORM_DIR"]
 	try:
 		mani = "./epocroot/manifest"
 		manifest = open(ReplaceEnvs(mani), "r")
-		# This is a fast algorithm to read the manifest file
-		while 1:
-            # The file is close to 3000 lines.
-            # If this value changes, increment the number to include all lines
-			lines = manifest.readlines(3000)
-			if not lines:
-				break
-			for line in lines:
-				# Get rid of newline char and add to dictionary
-				all_files[line.rstrip("\n")] = True
-				# This bit makes a record of unique folders into a list
-				end = 0
-				while end != -1: # Look through the parent folders
-					end = line.rfind("/")
-					line = line[:end]
-					if line not in folders:
-						folders.append(line)
+		for line in manifest:
+			line = line.replace("$(HOSTPLATFORM_DIR)", host_platform)
+			# Get rid of newline char and add to dictionary
+			all_files[line.rstrip("\n")] = True
+			# This bit makes a record of unique folders into a list
+			end = 0
+			while end != -1: # Look through the parent folders
+				end = line.rfind("/")
+				line = line[:end]
+				if line not in folders:
+					folders.append(line)
 		# This algorithm walks through epocroot and handles files and folders
 		walkpath = "./epocroot"
 		for (root, dirs, files) in os.walk(ReplaceEnvs(walkpath), topdown =
@@ -176,6 +172,8 @@
 								traceback.print_tb(sys.exc_traceback)
 	except IOError,e:
 		print e
+	
+	print "Epocroot Cleaned"
 
 def fix_id(input_id):
 	return input_id.zfill(4)
--- a/sbsv2/raptor/test/common/run_tests.py	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/test/common/run_tests.py	Fri Nov 20 21:17:53 2009 +0000
@@ -277,8 +277,18 @@
 			# Save start/end times and save in dictionary for TMS
 			start_time = datetime.datetime.now()
 			try:
-				print "\n\nTEST " + str(test_number) + "/" + \
-						str(test_total) + ":\n",
+				test_number_text = "\n\nTEST " + str(test_number) + "/" + \
+						str(test_total) + ":"
+				
+				if self.fail_total > 0:
+					test_number_text += "    So far " + str(self.fail_total) + \
+							" FAILED"
+				if self.exception_total > 0:
+					test_number_text += "    So far " + str(self.exception_total) + \
+							" ERRONEOUS"
+				
+				print test_number_text
+				
 				test_object = test.run()
 				
 				end_time = datetime.datetime.now()
@@ -330,6 +340,7 @@
 						traceback.print_tb(sys.exc_traceback)
 				self.exception_total += 1
 				self.error_tests.append(str(self.test_set[test_number - 1]))
+								
 				
 		if self.upload_location != None:
 			self.create_csv()
@@ -487,7 +498,7 @@
 		print "\n(Tests run using %s" %options_dir
 
 		# Summarise the entire test run
-		if self.suitepattern and (self.test_total < 1):
+		if self.suitepattern and (len(suites) < 1):
 			print "\nNo suites matched specification '" + self.suitepattern + \
 					"'\n"
 		else:
--- a/sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_check.py	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_check.py	Fri Nov 20 21:17:53 2009 +0000
@@ -15,6 +15,7 @@
 #
 
 from raptor_tests import CheckWhatSmokeTest
+import re
 
 def run():
 	t = CheckWhatSmokeTest()
@@ -44,4 +45,32 @@
 		"MISSING: $(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
 	]
 	t.run()
+
+	t.id = "6a"
+	t.name = "exe_armv5_winscw_check_error"
+	t.command = "sbs -b no/such/bld.inf --check"
+	t.targets = []
+	t.missing = 0
+	t.errors = 2
+	t.returncode = 1
+	t.regexlinefilter = re.compile("^NEVER") # no literal stdout matching
+	t.stdout = []
+	t.mustmatch = [
+		"sbs: error:.*build info file does not exist",
+		"sbs: error: no CHECK information found",
+	]
+	t.run()
+
+	t.id = "6b"
+	t.name = "exe_armv5_winscw_what_error"
+	t.command = "sbs -b no/such/bld.inf --what"
+	t.mustmatch = [
+		"sbs: error:.*build info file does not exist",
+		"sbs: error: no WHAT information found",
+	]
+	t.run()
+
+	t.id = "6"
+	t.name = "exe_armv5_winscw_check"
+	t.print_result()
 	return t
--- a/sbsv2/raptor/test/smoke_suite/mmp_keywords.py	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/test/smoke_suite/mmp_keywords.py	Fri Nov 20 21:17:53 2009 +0000
@@ -17,10 +17,10 @@
 from raptor_tests import SmokeTest
 
 def run():
-	result = SmokeTest.PASS
 	t = SmokeTest()
 	t.description = "This testcase tests all mmp keywords including new implementation of 'paged/unpaged code/data'"
 	t.usebash = True
+	
 	t.id = "75a"
 	t.name = "mmp_1"
 	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp1/group/bld.inf -c armv5 -f-"
@@ -45,8 +45,6 @@
 		".*armlink.*--verbose.*"
 	]
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
 
 	t.id = "75b"
 	t.name = "mmp_2"
@@ -72,9 +70,6 @@
 	]
 	t.warnings = 2
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-	
 	
 	t.id = "75c"
 	t.name = "mmp_3"
@@ -117,9 +112,6 @@
 	t.mustnotmatch = []
 	t.warnings = 0
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
-	
 	
 	t.id = "75d"
 	t.name = "mmp_4"
@@ -167,8 +159,6 @@
 		])
 	t.mustmatch = []
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
 	
 	# Test keywords: version, firstlib, nocompresstarget
 	t.id = "75e"
@@ -189,8 +179,6 @@
 		"fuzzlib_lib/armv5/urel/uc_exe_.o",
 		])
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
 
 	t.id = "75f"
 	t.name = "mmp_6"
@@ -199,15 +187,11 @@
 		"$(EPOCROOT)/epoc32/release/armv5/udeb/diagsuppress_test.dll",
 		"$(EPOCROOT)/epoc32/release/armv5/urel/diagsuppress_test.dll",
 		]
-
 	t.mustmatch = [
 					"--diag_suppress 6780",
 					"--diag_suppress 6331"
 					]
-
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
 	
 	t.id = "75g"
 	t.name = "mmp_7"
@@ -216,13 +200,9 @@
 		"$(EPOCROOT)/epoc32/release/armv5/urel/diagsuppress_noarmlibs_test.dll",
 		"$(EPOCROOT)/epoc32/release/armv5/udeb/diagsuppress_noarmlibs_test.dll"
 		]
-
 	t.mustmatch = ["--diag_suppress 6331"]
 	t.mustnotmatch = ["--diag_suppress 6780"]
-
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
 
 	# Test keyword: version
 	t.id = "75h"
@@ -238,13 +218,77 @@
 	t.mustnotmatch = []
 	t.warnings = 2
 	t.run()
-	if t.result == SmokeTest.FAIL:
-		result = SmokeTest.FAIL
+
+	# Test keyword: armfpu softvfp|vfpv2
+	# Both armv5 RVCT (9a+b) and GCCE (10) builds, as they differ in behaviour.
+	t.id = "75i"
+	t.name = "mmp_9a"
+	t.command = "sbs -b $(SBS_HOME)/test/smoke_suite/test_resources/mmp/mmp9_10/bld.inf -p armfpu_soft.mmp -c armv5_urel -f-"			
+	t.targets = []
+	t.mustmatch = ["--fpu softvfp", "--fpu=softvfp"]
+	t.mustnotmatch = ["--fpu vfpv2", "--fpu=vfpv2"]
+	t.warnings = 0
+	t.run()
+		
+	t.id = "75j"
+	t.name = "mmp_9b"
+	t.command = "sbs -b $(SBS_HOME)/test/smoke_suite/test_resources/mmp/mmp9_10/bld.inf -c armv5_urel REALLYCLEAN &&" \
+			+ " sbs -b $(SBS_HOME)/test/smoke_suite/test_resources/mmp/mmp9_10/bld.inf -p armfpu_vfpv2.mmp -c armv5_urel -f-"
 
+	t.mustmatch = ["--fpu vfpv2", "--fpu=vfpv2"]
+	t.mustnotmatch = ["--fpu softvfp", "--fpu=softvfp"]	
+	t.run()
+	
+	t.id = "75k"
+	t.name = "mmp_10"
+	t.command = "sbs -b $(SBS_HOME)/test/smoke_suite/test_resources/mmp/mmp9_10/bld.inf  -c armv5_urel_gcce4_3_2 REALLYCLEAN &&" \
+			+ " sbs -b $(SBS_HOME)/test/smoke_suite/test_resources/mmp/mmp9_10/bld.inf -c armv5_urel_gcce4_3_2 -f-"
+	t.countmatch = [
+		["-mfloat-abi=soft", 2],
+		["--fpu=softvfp", 2]
+	]
+	t.mustmatch = []
+	t.mustnotmatch = ["--fpu=vfpv2"]
+	t.run()
+	
+	# Test keywords: compresstarget, nocompresstarget, bytepaircompresstarget, inflatecompresstarget
+	t.id = "75l"
+	t.name = "mmp_11"
+	t.command = "sbs -b $(SBS_HOME)/test/smoke_suite/test_resources/mmp/mmp11/bld.inf -c armv5_urel -f-"
+	t.mustmatch_singleline = [
+		"elf2e32.*--output.*\/compress\.exe.*--compressionmethod=inflate",
+		"elf2e32.*--output.*\/nocompress\.exe.*--uncompressed",
+		"elf2e32.*--output.*\/bytepaircompress\.exe.*--compressionmethod=bytepair",
+		"elf2e32.*--output.*\/inflatecompress\.exe.*--compressionmethod=inflate",
+		"elf2e32.*--output.*\/combinedcompress\.exe.*--compressionmethod=bytepair",		
+		"COMPRESSTARGET keyword in .*combinedcompresstarget.mmp overrides earlier use of NOCOMPRESSTARGET",
+		"INFLATECOMPRESSTARGET keyword in .*combinedcompresstarget.mmp overrides earlier use of COMPRESSTARGET",
+		"BYTEPAIRCOMPRESSTARGET keyword in .*combinedcompresstarget.mmp overrides earlier use of INFLATECOMPRESSTARGET"
+	]
+	t.countmatch = []
+	t.mustnotmatch = []
+	t.warnings = 3
+	t.run()
+
+	# Test keyword: APPLY
+	t.id = "75m"
+	t.name = "apply"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/apply/bld.inf -f- -k --configpath=test/config"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_mmp_apply.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_mmp_apply.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test_mmp_apply.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test_mmp_apply.exe"
+		]
+	t.mustmatch_singleline = ["-DAPPLYTESTEXPORTEDVAR",
+	                          "-DAPPLYTESTAPPENDCDEFS"]
+	t.countmatch = [["<error.*APPLY unknown variant 'no_such_var'", 2]]
+	t.errors = 2 # no_such_var for armv5 and winscw
+	t.warnings = 0
+	t.returncode = 1
+	t.run()
 
 	t.id = "75"
 	t.name = "mmp_keywords"
-	t.result = result
 	t.print_result()
 	return t
-
--- a/sbsv2/raptor/test/smoke_suite/user_tools.py	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/test/smoke_suite/user_tools.py	Fri Nov 20 21:17:53 2009 +0000
@@ -40,7 +40,7 @@
 		
 		t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5_urel" \
 				+ " -n --toolcheck off -f " + t.logfile() + " -m " + t.makefile() \
-				+ " && $(__CYGWIN__)/bin/grep.exe -ir 'TALON_SHELL:=C:/cygwin/bin/sh.exe' " + t.makefile() + ".default"
+				+ " && $(__CYGWIN__)/bin/grep.exe -ir 'TALON_SHELL:=C:/cygwin/bin/sh.exe' " + t.makefile() + "_all.default"
 				
 		t.mustmatch = [
 				"TALON_SHELL:=C:/cygwin/bin/sh.exe"
--- a/sbsv2/raptor/util/Makefile	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/util/Makefile	Fri Nov 20 21:17:53 2009 +0000
@@ -17,13 +17,6 @@
 
 SHELL:=bash
 
-
-SBS_HOME=$(abspath $(dir $(word 1,$(MAKEFILE_LIST)))/..)
-export SBS_HOME
-
-$(info SBS_HOME=$(SBS_HOME))
-
-
 .PHONY:: all
 all::
 
--- a/sbsv2/raptor/util/install-linux/package_sbs.sh	Thu Nov 19 18:52:19 2009 +0000
+++ b/sbsv2/raptor/util/install-linux/package_sbs.sh	Fri Nov 20 21:17:53 2009 +0000
@@ -25,17 +25,8 @@
 packtype=source
 fi
 
-
 echo "Raptor packager for Linux"
-
-
-# Calculate SBS_HOME from where this script is started
-temp=$0
-SBS_HOME=$(cd ${temp%/*} && echo $PWD)
-export SBS_HOME=${SBS_HOME%/util/install-linux}
-
-
-export PACKAGER_HOME="$SBS_HOME/util/install-linux"
+export PACKAGER_HOME="$PWD"
 
 echo "SBS_HOME is $SBS_HOME - this is the version that will be packaged."