# HG changeset patch # User Richard Taylor # Date 1263486577 0 # Node ID bc8e1b2568a4302721f938129e3f5cbf119322b5 # Parent d4f6f170ebe2c31f2e0ac8dacd8bec41023409e6# Parent c02a2a09d864c324d0232c5578b2b7ea57fa9669 catch up to 2.11.3 from default diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/RELEASE-NOTES.txt --- a/sbsv2/raptor/RELEASE-NOTES.txt Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/RELEASE-NOTES.txt Thu Jan 14 16:29:37 2010 +0000 @@ -1,6 +1,17 @@ Release Notes for Symbian Build System v2 +Next version + +Other Changes: +Combine Linking and Postlinking into a single step +New 'Patchable Constants' target type: TARGETTYPE pdll +Support exit codes from next version of the trace compiler which will issue them +New (experimental) FilterWhatComp filter. Simulates abld log output for use with parse_what.pl for packing up zips by component. +New graphical build visualisation tool (bin/timelines.py). Requires pygame and PyOpenGL. +New a log analyser for recording the total time spent in each type of recipe in the build (recipestats.py). + + version 2.11.3 Defect Fixes: diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/bin/recipestats.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/bin/recipestats.py Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,117 @@ +#!/usr/bin/env python +# +# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +# display summary information about recipes from raptor logs +# e.g. total times and so on. + +import time + +class RecipeStats(object): + STAT_OK = 0 + + + def __init__(self): + self.stats = {} + self.failcount = 0 + self.failtime = 0.0 + self.failtypes = {} + self.retryfails = 0 + + def add(self, starttime, duration, name, status): + if status != RecipeStats.STAT_OK: + self.failcount += 1 + if name in self.failtypes: + self.failtypes[name] += 1 + else: + self.failtypes[name] = 1 + + if status == 128: + self.retryfails += 1 + return + + if name in self.stats: + (count, time) = self.stats[name] + self.stats[name] = (count + 1, time + duration) + else: + self.stats[name] = (1,duration) + + def recipe_csv(self): + s = "# name, time, count\n" + for (name,(count,time)) in self.stats.iteritems(): + s += '"%s",%s,%d\n' % (name, str(time), count) + return s + + + +import sys +import re + +def main(): + + f = sys.stdin + st = RecipeStats() + + recipe_re = re.compile(".*&2 + exit 1 +fi + +if [ ! -d "$SBS_HOME/$HOSTPLATFORM_DIR" ]; then +cat 1>&2 <&2 + echo "Check your SBS_HOME environment variable." 1>&2 +fi diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/bin/sbs_filter.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/bin/sbs_filter.bat Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,47 @@ +@rem +@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of the License "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +@REM Automatically find SBS_HOME if it is not set +@IF NOT "%SBS_HOME%"=="" goto foundhome +@SET RAPTORBINDIR=%~dp0 +@SET WD=%cd% +@cd %RAPTORBINDIR%\.. +@SET SBS_HOME=%cd% +@cd %WD% +:foundhome + +@REM Use the cygwin set by the environment if possible +@SET __CYGWIN__=%SBS_CYGWIN% +@IF "%__CYGWIN__%"=="" SET __CYGWIN__=%SBS_HOME%\win32\cygwin + +@REM add to the search path +@SET PATH=%__CYGWIN__%\bin;%PATH% + +@REM Make sure that /tmp is not set incorrectly for sbs +@umount -u /tmp >NUL 2>NUL +@mount -u %TEMP% /tmp >NUL 2>NUL +@umount -u / >NUL 2>NUL +@mount -u %__CYGWIN__% / >NUL 2>NUL + +@REM Tell CYGWIN not to map unix security attributes to windows to +@REM prevent raptor from potentially creating read-only files: +@set CYGWIN=nontsec nosmbntsec + +@REM Run with all the arguments. +@bash %SBS_HOME%\bin\sbs_filter %* + +@ENDLOCAL +@cmd /c exit /b %ERRORLEVEL% diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/bin/timelines.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/bin/timelines.py Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,224 @@ +# +# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +# Raptor log visualisation program. Takes a raptor log as standard input +# and displays timelines that represent build progress and +# how much actual parallelism there is in the build. +# This program requires the pygame and PyOpenGL modules. + +from OpenGL.GL import * +from OpenGL.GLU import * +import pygame +from pygame.locals import * +import time + +class Timeline(object): + """A bar representing a number of recipes which were executed in + time sequence. There is no guarantee about what host but in + theory they could have been executed on the same host.""" + + globalmax = 2.0 + + def __init__(self,ylevel): + self.maxtime = 0.0 + self.recipes = [] + self.ylevel = ylevel + + def append(self, recipe): + "" add this recipe to this timeline if it happens after the latest recipe already in the timeline "" + if recipe.starttime + recipe.duration > self.maxtime: + self.maxtime = recipe.starttime + recipe.duration + if self.maxtime > Timeline.globalmax: + Timeline.globalmax = self.maxtime + else: + pass + + self.recipes.append(recipe) + + def draw(self): + glLoadIdentity() + self.xscale = 4.0 / Timeline.globalmax + + glTranslatef(-2.0, -1.5, -6.0) + count = 0 + for r in self.recipes: + if count % 2 == 0: + coloff=0.8 + else: + coloff = 1.0 + + count += 1 + r.draw(self.xscale, self.ylevel, coloff) + +class Recipe(object): + """Represents a task completed in a raptor build. + Drawn as a colour-coded bar with different + colours for the various recipe types.""" + STAT_OK = 0 + colours = { + 'compile': (0.5,0.5,1.0), + 'compile2object': (0.5,0.5,1.0), + 'win32compile2object': (0.5,0.5,1.0), + 'tools2linkexe': (0.5,1.0,0.5), + 'link': (0.5,1.0,0.5), + 'linkandpostlink': (0.5,1.0,0.5), + 'win32stageonelink': (0.5,1.0,0.5), + 'tools2lib': (0.5,1.0,1.0), + 'win32stagetwolink': (1.0,0.1,1.0), + 'postlink': (1.0,0.5,1.0) + } + + def __init__(self, starttime, duration, name, status): + self.starttime = starttime + self.duration = duration + self.status = status + self.colour = (1.0, 1.0, 1.0) + if name in Recipe.colours: + self.colour = Recipe.colours[name] + else: + self.colour = (1.0,1.0,1.0) + self.name = name + + def draw(self, scale, ylevel, coloff): + if self.status == Recipe.STAT_OK: + glColor4f(self.colour[0]*coloff, self.colour[1]*coloff, self.colour[2]*coloff,0.2) + else: + glColor4f(1.0*coloff, 0.6*coloff, 0.6*coloff,0.2) + + + x = self.starttime * scale + y = ylevel + x2 = x + self.duration * scale + y2 = ylevel + 0.2 + glBegin(GL_QUADS) + glVertex3f(x, y, 0) + glVertex3f(x, y2, 0) + glVertex3f(x2, y2, 0) + glVertex3f(x2, y, 0) + glEnd() + + +def resize((width, height)): + if height==0: + height=1 + glViewport(0, 0, width, height) + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + gluPerspective(45, 1.0*width/height, 0.1, 100.0) + glMatrixMode(GL_MODELVIEW) + glLoadIdentity() + +def init(): + glShadeModel(GL_SMOOTH) + glClearColor(0.0, 0.0, 0.0, 0.0) + glClearDepth(1.0) + glEnable(GL_DEPTH_TEST) + glDepthFunc(GL_LEQUAL) + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST) + + +import sys +import re + +def main(): + + video_flags = OPENGL|DOUBLEBUF + + pygame.init() + pygame.display.set_mode((800,600), video_flags) + + resize((800,600)) + init() + + frames = 0 + ticks = pygame.time.get_ticks() + + + lines = 4 + timelines = [] + ylevel = 0.0 + for i in xrange(0,4): + ylevel += 0.6 + timelines.append(Timeline(ylevel)) + + f = sys.stdin + + recipe_re = re.compile(".* newdiff: + dest_timeline = t + olddiff = newdiff + tnum += 1 + + dest_timeline.append(Recipe(s, elapsed, rname, status)) + event = pygame.event.poll() + if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): + break + + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) + for t in timelines: + t.draw() + pygame.display.flip() + + frames = frames+1 + + print "fps: %de" % ((frames*1000)/(pygame.time.get_ticks()-ticks)) + event = pygame.event.wait() + + +if __name__ == '__main__': main() diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/config/interfaces.xml --- a/sbsv2/raptor/lib/config/interfaces.xml Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/lib/config/interfaces.xml Thu Jan 14 16:29:37 2010 +0000 @@ -5,12 +5,13 @@ - + + diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/config/variants.xml --- a/sbsv2/raptor/lib/config/variants.xml Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/lib/config/variants.xml Thu Jan 14 16:29:37 2010 +0000 @@ -187,7 +187,6 @@ - diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/config/winscw.xml --- a/sbsv2/raptor/lib/config/winscw.xml Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/lib/config/winscw.xml Thu Jan 14 16:29:37 2010 +0000 @@ -26,6 +26,7 @@ + diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/flm/e32abiv2.flm --- a/sbsv2/raptor/lib/flm/e32abiv2.flm Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/lib/flm/e32abiv2.flm Thu Jan 14 16:29:37 2010 +0000 @@ -384,7 +384,24 @@ # Generating the import library is enough if TARGETTYPE=implib ############# ifneq ($(DOPOSTLINK),) -include $(FLMHOME)/e32postlink.mk +# Capabilities +ADDED_CAPABILITIES:=$(subst $(CHAR_SPACE),+,$(filter-out -%,$(CAPABILITY))) +SUBTRACTED_CAPABILITIES:=$(subst $(CHAR_SPACE),,$(filter -%,$(CAPABILITY))) +FINAL_CAPABILITIES:=$(if $(ADDED_CAPABILITIES),$(ADDED_CAPABILITIES)$(SUBTRACTED_CAPABILITIES),NONE) + +# Paging options for the old postlinker +POSTLINKER_PAGEDOPTION:=--defaultpaged +ifeq ($(PAGED),1) + POSTLINKER_PAGEDOPTION:=--paged +endif +ifeq ($(PAGED),0) + POSTLINKER_PAGEDOPTION:=--unpaged +endif + +CLEANTARGETS:=$(CLEANTARGETS) $(E32TARGET) +CLEANTARGETS:=$(CLEANTARGETS) $(GENERATED_DEFFILE) +CLEANTARGETS:=$(CLEANTARGETS) $(GENERATED_DSO) + endif # ifneq ($(DOPOSTLINK),) ifneq ($(TARGETTYPE),implib) @@ -592,10 +609,10 @@ # outside the relevant tags but it is also unavoidable. define linktarget_func ## The actual link target, dependencies and build step -$(LINK_TARGET): $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT) $(CIAFILES_LINKOBJECTS),$(LINKOBJECTS)) $(escaped_e32abiv2_LIBS) $(LINKER_ENTRYPOINT_LIBDEP) $(if $(SUPPORTS_STDCPP_NEWLIB),$(CHECKLIB)) $(if $(LINKERFEEDBACK_STAGE2),$(FEEDBACKFILE),) +$(E32TARGET): $(POSTLINKDEFFILE) $(ELF2E32) $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT) $(CIAFILES_LINKOBJECTS),$(LINKOBJECTS)) $(escaped_e32abiv2_LIBS) $(LINKER_ENTRYPOINT_LIBDEP) $(if $(SUPPORTS_STDCPP_NEWLIB),$(CHECKLIB)) $(if $(LINKERFEEDBACK_STAGE2),$(FEEDBACKFILE),) $(if $(HAVE_ORDERONLY),|,) $(EPOCROOT)/epoc32/build/TEM_LIB $(if $(MULTIFILE_ENABLED),,@echo -n "" > $(VIAFILE); $(call groupin10,$(LINKOBJECTS)) ;) - $(call startrule,link) \ + $(call startrule,linkandpostlink) \ $(if $(PERTURBSTARTTIME),$(RANSLEEP) $(PERTURBMSECS) ;,) \ $(if $(SUPPORTS_STDCPP_NEWLIB),$(if $(located_STATICLIBRARIES),$(CHECKLIB) $(CHECKLIB_TYPE) --elf $(call dblquote,$(located_STATICLIBRARIES)) &&,),) \ $(LD) $(LINKER_MISC_FLAGS) $(LINKER_DEFAULT_LIB_PATHS) $(SYMBIAN_LINK_FLAGS) $(if $(DEBUG_INFO),$(LINKER_DEBUG_OPTION),$(LINKER_NODEBUG_OPTION)) \ @@ -605,19 +622,61 @@ $(LINKER_ARCH_OPTION) \ $(SYMVER_OPTION) $(SO_NAME_OPTION)=$(call dblquote,$(LINKASVERSIONED)) \ $(LINKER_ENTRYPOINT_SETTING) \ - -o $$(call dblquote,$$@) \ + -o $$(call dblquote,$(LINK_TARGET)) \ $(if $(LTCG),$(LTCG_OPTION),) \ $(LINKER_SYMBOLS_OPTION) $(LINKER_SYMBOLS_FILE_OPTION)=$(call dblquote,$(MAPFILE)) \ $(LINKEROPTION) \ $(if $(MULTIFILE_ENABLED),$(call dblquote,$(MULTIFILEOBJECT) $(CIAFILES_LINKOBJECTS)),$(COMMANDFILE_OPTION)$(call dblquote,$(VIAFILE))) \ - $(if $(GENERATELINKERFEEDBACK),$(FEEDBACK_OPTION)$(call dblquote,$(FEEDBACKFILE))) \ + $(if $(GENERATELINKERFEEDBACK),$(FEEDBACK_OPTION)$(call dblquote,$(FEEDBACKFILE))) \ $(if $(LINKER_ADD_STATIC_RUNTIME),$(if $(STATIC_RUNTIME_LIB),$(LINKER_GROUP_START_OPTION) $(STATIC_RUNTIME_DIR)/$(STATIC_RUNTIME_LIB) $(LINKER_GROUP_END_OPTION),)) \ - $(quoted_e32abiv2_LIBS) $(LINKER_DEFAULT_LIBS)\ - $(call endrule,link) + $(quoted_e32abiv2_LIBS) $(LINKER_DEFAULT_LIBS) && \ + $(ELF2E32) \ + --sid=0x$(if $(SID),$(SID),$(if $(UID3),$(UID3),0)) \ + --version=$(VERSION) \ + --capability=$(FINAL_CAPABILITIES) \ + --linkas=$(call dblquote,$(LINKASVERSIONED)) \ + --fpu=$(if $(ARMFPU),$(ARMFPU),$(POSTLINKER_FPU_DEFAULT)) \ + --targettype=$(POSTLINKTARGETTYPE) \ + --output=$$(call dblquote,$$@) \ + --elfinput=$(call dblquote,$(LINK_TARGET)) \ + $(if $(UID1),--uid1=0x$(UID1),) \ + $(if $(UID2),--uid2=0x$(UID2),) \ + $(if $(UID3),--uid3=0x$(UID3),) \ + $(if $(VENDORID),--vid=0x$(VENDORID),) \ + $(if $(EXPTARGET),--customdlltarget,) \ + $(if $(ARMLIBS),--excludeunwantedexports,) \ + $(if $(EPOCALLOWDLLDATA),--dlldata,) \ + $(if $(EPOCPROCESSPRIORITY),--priority=$(EPOCPROCESSPRIORITY),) \ + $(if $(EPOCSTACKSIZE),--stack=0x$(EPOCSTACKSIZE),) \ + $(if $(EPOCHEAPSIZEMIN),--heap=0x$(EPOCHEAPSIZEMIN)$(CHAR_COMMA)0x$(EPOCHEAPSIZEMAX),) \ + $(if $(EPOCFIXEDPROCESS),--fixedaddress,) \ + $(if $(EPOCDATALINKADDRESS),--datalinkaddress=$(EPOCDATALINKADDRESS),) \ + $(if $(NAMEDSYMLKUP),--namedlookup,) \ + $(if $(SMPSAFE),--smpsafe,) \ + $(if $(POSTLINKDEFFILE),--definput=$(POSTLINKDEFFILE),) \ + $(if $(EXPORTUNFROZEN),--unfrozen,) \ + $(if $(AUTOEXPORTS),--sysdef=$(call dblquote,$(AUTOEXPORTS)),) \ + $(if $(CANIGNORENONCALLABLE), \ + $(if $(IMPORTLIBRARYREQUIRED),,--ignorenoncallable),) \ + $(if $(CANHAVEEXPORTS), --defoutput=$(call dblquote,$(GENERATED_DEFFILE)) --dso=$(GENERATED_DSO)) \ + $(if $(filter $(VARIANTTYPE),$(DEBUGGABLE)),--debuggable,) \ + $(if $(POSTLINKER_SUPPORTS_WDP), \ + --codepaging=$(PAGEDCODE_OPTION) --datapaging=$(PAGEDDATA_OPTION), \ + $(POSTLINKER_PAGEDOPTION)) \ + $(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; })) \ + $(call endrule,linkandpostlink) -$(MAPFILE): $(LINK_TARGET) +$(MAPFILE): $(E32TARGET) +$(LINK_TARGET): $(E32TARGET) endef +ifneq ($(DOPOSTLINK),) $(eval $(linktarget_func)) +endif # ifneq ($(DOPOSTLINK),) CLEANTARGETS:=$(CLEANTARGETS) $(VIAFILE) $(if $(GENERATELINKERFEEDBACK),$(FEEDBACKFILE)) $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT)) WHATRELEASE:=$(WHATRELEASE) $(MAPFILE) diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/flm/e32abiv2defaults.mk --- a/sbsv2/raptor/lib/flm/e32abiv2defaults.mk Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/lib/flm/e32abiv2defaults.mk Thu Jan 14 16:29:37 2010 +0000 @@ -59,7 +59,7 @@ LINKER_ENTRYPOINT_ADORNMENT:=(uc_exe_.o) endif - ifeq ($(call isoneof,$(TARGETTYPE),ani textnotifier2 stddll plugin fsy pdl dll),1) + ifeq ($(call isoneof,$(TARGETTYPE),ani textnotifier2 stddll plugin fsy pdl dll pdll),1) LINKER_ENTRYPOINT_ADORNMENT:=(uc_dll_.o) endif diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/flm/e32abiv2dll.flm --- a/sbsv2/raptor/lib/flm/e32abiv2dll.flm Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/lib/flm/e32abiv2dll.flm Thu Jan 14 16:29:37 2010 +0000 @@ -55,6 +55,6 @@ $(call vrestore) else -$(error $e32abiv2dll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)')) +$(error e32abiv2dll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)')) endif diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/flm/e32abiv2pdll.flm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/lib/flm/e32abiv2pdll.flm Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,61 @@ +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# ARMv5 PDLL ABIv2 Function Like Makefile (FLM) +# Build an e32 PDLL (Patchable constants DLL) +# +# + +ifeq ($(TARGETTYPE),pdll) +include $(FLMHOME)/e32abiv2defaults.mk + +# What we need to build a DLL +ifeq ($(NOEXPORTLIBRARY),) +IMPORTLIBRARYREQUIRED:=1 +endif +POSTLINKDEFFILE:=$(DEFFILE) +SUPPORT_FREEZE:=1 + +# Default Linker settings for this target type +LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib +LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION)=_E32Dll $(LINKER_ENTRYPOINT_DECORATION)$(LINKER_SEPARATOR)$(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT)) + +ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True") +LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP) +endif + +LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib +STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB) + + +# Default Postlinker settings +CANHAVEEXPORTS:=1 +POSTLINKTARGETTYPE:=DLL +POSTLINKFILETYPE:=dll +DOPOSTLINK:=1 +CANIGNORENONCALLABLE:=1 + +# Use the general EABI FLM +# We are appending to CDEFS but we don't want this to affect +# other invocations so we are going to save it on a stack +# and restore it afterwards +$(call vsave,CDEFS) +CDEFS:=$(CDEFS) __DLL__ +include $(FLMHOME)/e32abiv2.flm +$(call vrestore) + +else +$(error e32abiv2pdll.flm called with wrong TARGETTYPE (should be 'pdll' but is '$(TARGETTYPE)')) +endif + + diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/flm/e32postlink.mk --- a/sbsv2/raptor/lib/flm/e32postlink.mk Thu Jan 14 16:03:18 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -# -# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -# All rights reserved. -# This component and the accompanying materials are made available -# under the terms of the License "Eclipse Public License v1.0" -# which accompanies this distribution, and is available -# at the URL "http://www.eclipse.org/legal/epl-v10.html". -# -# Initial Contributors: -# Nokia Corporation - initial contribution. -# -# Contributors: -# -# Description: -# ARMv5 e32 postlinking FLM -# Knows how to postlink all possible ABIV2 executables for ARM -# - -# Interface -# -# Metadata supplied (or deduced from) -# -# ARMFPU -# BYTEPAIRCOMPRESSTARGET -# CAPABILITY -# 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 -# EPOCHEAPSIZEMAX -# EPOCHEAPSIZEMIN -# EPOCPROCESSPRIORITY -# EPOCSTACKSIZE -# EXPORTUNFROZEN -# INFLATECOMPRESSTARGET -# NOCOMPRESSTARGET -# POSTLINKTARGETTYPE -# SID -# SMPSAFE -# UID2 -# UID3 -# VERSION -# VENDORID -# -# 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.) -# CANHAVEEXPORTS -# CLEANTARGETS -# ELF2E32 -# EPOCDATALINKADDRESS Redundant? -# EPOCROOT -# EXPTARGET -# GENERATED_DEFFILE -# GENERATED_DSO -# HAVE_ORDERONLY -# IMPORTLIBRARYREQUIRED -# INTERMEDIATEPATH -# LINKASVERSIONED -# 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 -# STATIC_LIBS_PATH -# UID1 -# VARIANTTYPE - - -# Capabilities -ADDED_CAPABILITIES:=$(subst $(CHAR_SPACE),+,$(filter-out -%,$(CAPABILITY))) -SUBTRACTED_CAPABILITIES:=$(subst $(CHAR_SPACE),,$(filter -%,$(CAPABILITY))) -FINAL_CAPABILITIES:=$(if $(ADDED_CAPABILITIES),$(ADDED_CAPABILITIES)$(SUBTRACTED_CAPABILITIES),NONE) - -# Paging options for the old postlinker -POSTLINKER_PAGEDOPTION:=--defaultpaged -ifeq ($(PAGED),1) - POSTLINKER_PAGEDOPTION:=--paged -endif -ifeq ($(PAGED),0) - POSTLINKER_PAGEDOPTION:=--unpaged -endif - -# Postlink target -define e32postlink -$(E32TARGET): $(LINK_TARGET) $(POSTLINKDEFFILE) $(ELF2E32) $(if $(HAVE_ORDERONLY),|,) $(EPOCROOT)/epoc32/build/TEM_LIB - $(call startrule,postlink) \ - $(ELF2E32) \ - --sid=0x$(if $(SID),$(SID),$(if $(UID3),$(UID3),0)) \ - --version=$(VERSION) \ - --capability=$(FINAL_CAPABILITIES) \ - --linkas=$(call dblquote,$(LINKASVERSIONED)) \ - --fpu=$(if $(ARMFPU),$(ARMFPU),$(POSTLINKER_FPU_DEFAULT)) \ - --targettype=$(POSTLINKTARGETTYPE) \ - --output=$$(call dblquote,$$@) \ - --elfinput=$(call dblquote,$(LINK_TARGET)) \ - $(if $(UID1),--uid1=0x$(UID1),) \ - $(if $(UID2),--uid2=0x$(UID2),) \ - $(if $(UID3),--uid3=0x$(UID3),) \ - $(if $(VENDORID),--vid=0x$(VENDORID),) \ - $(if $(EXPTARGET),--customdlltarget,) \ - $(if $(ARMLIBS),--excludeunwantedexports,) \ - $(if $(EPOCALLOWDLLDATA),--dlldata,) \ - $(if $(EPOCPROCESSPRIORITY),--priority=$(EPOCPROCESSPRIORITY),) \ - $(if $(EPOCSTACKSIZE),--stack=0x$(EPOCSTACKSIZE),) \ - $(if $(EPOCHEAPSIZEMIN),--heap=0x$(EPOCHEAPSIZEMIN)$(CHAR_COMMA)0x$(EPOCHEAPSIZEMAX),) \ - $(if $(EPOCFIXEDPROCESS),--fixedaddress,) \ - $(if $(EPOCDATALINKADDRESS),--datalinkaddress=$(EPOCDATALINKADDRESS),) \ - $(if $(NAMEDSYMLKUP),--namedlookup,) \ - $(if $(SMPSAFE),--smpsafe,) \ - $(if $(POSTLINKDEFFILE),--definput=$(POSTLINKDEFFILE),) \ - $(if $(EXPORTUNFROZEN),--unfrozen,) \ - $(if $(AUTOEXPORTS),--sysdef=$(call dblquote,$(AUTOEXPORTS)),) \ - $(if $(CANIGNORENONCALLABLE), \ - $(if $(IMPORTLIBRARYREQUIRED),,--ignorenoncallable),) \ - $(if $(CANHAVEEXPORTS), --defoutput=$(call dblquote,$(GENERATED_DEFFILE)) --dso=$(GENERATED_DSO)) \ - $(if $(filter $(VARIANTTYPE),$(DEBUGGABLE)),--debuggable,) \ - $(if $(POSTLINKER_SUPPORTS_WDP), \ - --codepaging=$(PAGEDCODE_OPTION) --datapaging=$(PAGEDDATA_OPTION), \ - $(POSTLINKER_PAGEDOPTION)) \ - $(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; })) \ - $(call endrule,postlink) -endef -$(eval $(e32postlink)) - -CLEANTARGETS:=$(CLEANTARGETS) $(E32TARGET) -CLEANTARGETS:=$(CLEANTARGETS) $(GENERATED_DEFFILE) -CLEANTARGETS:=$(CLEANTARGETS) $(GENERATED_DSO) diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/flm/emulator.xml --- a/sbsv2/raptor/lib/flm/emulator.xml Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/lib/flm/emulator.xml Thu Jan 14 16:29:37 2010 +0000 @@ -151,6 +151,23 @@ + + + + + + + + + + + + + + + + + diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/flm/standard.xml --- a/sbsv2/raptor/lib/flm/standard.xml Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/lib/flm/standard.xml Thu Jan 14 16:29:37 2010 +0000 @@ -212,6 +212,10 @@ + + + + diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/flm/tracecompiler.mk --- a/sbsv2/raptor/lib/flm/tracecompiler.mk Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/lib/flm/tracecompiler.mk Thu Jan 14 16:29:37 2010 +0000 @@ -63,9 +63,9 @@ ( echo -en "$(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) ; \ - $(GNUCAT) $(TRACE_SOURCE_LIST) \ + $(JAVA_COMMAND) $(TRACE_COMPILER_START) $(UID_TC) && \ + $(GNUMD5SUM) $(TRACE_SOURCE_LIST) > $(TRACE_MARKER) && \ + { $(GNUCAT) $(TRACE_SOURCE_LIST) ; true ; } \ $(call endrule,tracecompile) endef diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/flm/win32dll.flm --- a/sbsv2/raptor/lib/flm/win32dll.flm Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/lib/flm/win32dll.flm Thu Jan 14 16:29:37 2010 +0000 @@ -30,5 +30,5 @@ include $(FLMHOME)/win32.flm else -$(error $win32dll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)')) +$(error win32dll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)')) endif diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/lib/flm/win32pdll.flm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/lib/flm/win32pdll.flm Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,34 @@ +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# WINSCW PDLL Function Like Makefile (FLM) +# Build an emulator PDLL +# +# + +ifeq ($(TARGETTYPE),pdll) + +BASE_TYPE:=dll +CW_STATIC_RUNTIME:=1 +FIRST_STATLIB:= +FIXED_EXPORT:= +SUPPORTS_IMPORT_LIBRARY:=1 +SYSTEM_TARGET:=0 +UID2_DEFAULT:= + +# Use the general win32 FLM +include $(FLMHOME)/win32.flm + +else +$(error $winp32dll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)')) +endif diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/python/plugins/filter_terminal.py --- a/sbsv2/raptor/python/plugins/filter_terminal.py Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/python/plugins/filter_terminal.py Thu Jan 14 16:29:37 2010 +0000 @@ -113,6 +113,7 @@ "asmcompile" : "asmcompile" , "compile" : "compile" , "postlink" : "target", + "linkandpostlink" : "target", "resourcecompile" : "resource", "genstringtable" : "strtable", "tem" : "tem", diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/python/plugins/filter_what.py --- a/sbsv2/raptor/python/plugins/filter_what.py Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/python/plugins/filter_what.py Thu Jan 14 16:29:37 2010 +0000 @@ -42,6 +42,12 @@ self.outfile.write(filename+"\n") self.prints += 1 + + def start_bldinf(self, bldinf): + pass + + def end_bldinf(self): + pass def open(self, build_parameters): @@ -79,6 +85,10 @@ "Regex for zip exports" self.zip_export_regex = re.compile("^.*") + + "Regex for determining bld.inf name" + self.whatlog_regex = re.compile("^", "]]>")) # and some general debug stuff @@ -822,7 +822,7 @@ return self.home.Append(aGenericPath) else: return aGenericPath - + # make generic paths absolute (if required) self.configPath = map(mkAbsolute, self.configPath) self.cache.Load(self.configPath) @@ -859,12 +859,12 @@ return x def GetBuildUnitsToBuild(self, configNames): - """Return a list of the configuration objects that correspond to the + """Return a list of the configuration objects that correspond to the list of configuration names in the configNames parameter. raptor.GetBuildUnitsToBuild(["armv5", "winscw"]) >>> [ config1, config2, ... , configN ] - """ + """ if len(configNames) == 0: # use default config @@ -878,9 +878,9 @@ for c in set(configNames): self.Debug("BuildUnit: %s", c) - try: + try: x = self.GetConfig(c) - gb = x.GenerateBuildUnits(self.cache) + gb = x.GenerateBuildUnits(self.cache) buildUnitsToBuild.update( gb ) except Exception, e: self.FatalError(str(e)) @@ -894,7 +894,7 @@ return buildUnitsToBuild def CheckToolset(self, evaluator, configname): - """Check the toolset for a particular config, allow other objects access + """Check the toolset for a particular config, allow other objects access to the toolset for this build (e.g. the raptor_make class).""" if self.toolset is None: if self.toolcheck == 'on': @@ -968,7 +968,7 @@ def FindComponentIn(self, aDir = None): - # look for a bld.inf + # look for a bld.inf if aDir is None: dir = generic_path.CurrentDir() @@ -1109,14 +1109,14 @@ for a,v in dictionary.items(): atts += " " + a + "='" + v + "'" return atts - + def Info(self, format, *extras, **attributes): """Send an information message to the configured channel (XML control characters will be escaped) """ self.out.write("" + escape(format % extras) + "\n") - + def InfoDiscovery(self, object_type, count): if self.timing: try: @@ -1124,7 +1124,7 @@ count = count)) except Exception, exception: Error(exception.Text, function = "InfoDiscoveryTime") - + def InfoStartTime(self, object_type, task, key): if self.timing: try: @@ -1132,7 +1132,7 @@ task = task, key = key)) except Exception, exception: Error(exception.Text, function = "InfoStartTime") - + def InfoEndTime(self, object_type, task, key): if self.timing: try: @@ -1154,7 +1154,7 @@ """Send a warning message to the configured channel (XML control characters will be escaped) """ - self.out.write("" + + self.out.write("" + escape(format % extras) + "\n") def FatalError(self, format, *extras, **attributes): @@ -1165,7 +1165,7 @@ further errors are probably triggered by the first. """ if not self.fatalErrorState: - self.out.write("" + + self.out.write("" + (format % extras) + "\n") self.errorCode = 1 self.fatalErrorState = True @@ -1174,7 +1174,7 @@ """Send an error message to the configured channel (XML control characters will be escaped) """ - self.out.write("" + + self.out.write("" + escape(format % extras) + "\n") self.errorCode = 1 @@ -1212,7 +1212,7 @@ if self.systemDefinitionFile != None: systemModel = raptor_xml.SystemModel(self, self.systemDefinitionFile, self.systemDefinitionBase) layers = self.GatherSysModelLayers(systemModel, self.systemDefinitionRequestedLayers) - + # Now get components specified on a commandline - build them after any # layers in the system definition. if len(self.commandlineComponents) > 0: @@ -1246,7 +1246,7 @@ self.Introduction() # establish an object cache self.AssertBuildOK() - + self.LoadCache() # find out what configurations to build @@ -1299,7 +1299,7 @@ for l in layers: # create specs for a specific group of components l.realise(self) - + except BuildCannotProgressException,b: if str(b) != "": self.Info(str(b)) @@ -1326,7 +1326,7 @@ build.ProcessConfig() build.CommandLine(argv) - return build + return build diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/python/raptor_data.py --- a/sbsv2/raptor/python/raptor_data.py Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/python/raptor_data.py Thu Jan 14 16:29:37 2010 +0000 @@ -722,15 +722,23 @@ def Apply(self, oldValue): try: value = os.environ[self.name] - - # if this value is a "path" or a "tool" then we need to make sure - # it is a proper absolute path in our preferred format. - if value and (self.type == "path" or self.type == "tool"): - try: - path = generic_path.Path(value) - value = str(path.Absolute()) - except ValueError,e: - raise BadToolValue("the environment variable %s is incorrect: %s" % (self.name, str(e))) + + if value: + # if this value is a "path" or a "tool" then we need to make sure + # it is a proper absolute path in our preferred format. + if self.type == "path" or self.type == "tool": + try: + path = generic_path.Path(value) + value = str(path.Absolute()) + except ValueError,e: + raise BadToolValue("the environment variable %s is incorrect: %s" % (self.name, str(e))) + # if this value ends in an un-escaped backslash, then it will be treated as a line continuation character + # in makefile parsing - un-escaped backslashes at the end of values are therefore escaped + elif value.endswith('\\'): + # an odd number of backslashes means there's one to escape + count = len(value) - len(value.rstrip('\\')) + if count % 2: + value += '\\' except KeyError: if self.default != None: value = self.default diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/test/smoke_suite/pdll_arm.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/test/smoke_suite/pdll_arm.py Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,121 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +from raptor_tests import AntiTargetSmokeTest + +def run(): + t = AntiTargetSmokeTest() + t.usebash = True + + command = "sbs -b smoke_suite/test_resources/simple_dll/pbld.inf -c %s -f -" + maintargets = [ + "$(EPOCROOT)/epoc32/release/%s/udeb/createstaticpdll.dll.sym", + "$(EPOCROOT)/epoc32/release/%s/urel/createstaticpdll.dll.sym", + "$(EPOCROOT)/epoc32/release/%s/udeb/createstaticpdll.dll", + "$(EPOCROOT)/epoc32/release/%s/urel/createstaticpdll.dll" + ] + armv5targets = [ + "$(EPOCROOT)/epoc32/release/%s/lib/createstaticpdll.dso", + "$(EPOCROOT)/epoc32/release/%s/lib/createstaticpdll{000a0000}.dso" + ] + abiv1libtargets = [ + "$(EPOCROOT)/epoc32/release/%s/lib/createstaticpdll.lib", + "$(EPOCROOT)/epoc32/release/%s/lib/createstaticpdll{000a0000}.lib" + ] + buildtargets = [ + "createstaticpdll_dll/%s/udeb/CreateStaticDLL.o", + "createstaticpdll_dll/%s/urel/CreateStaticDLL.o" + ] + mustmatch = [ + r".*\busrt\d_\d\.lib\b.*", + r".*\bscppnwdl\.dso\b.*" + ] + mustnotmatch = [ + ".*ksrt.*" + ] + + # Note that ABIv1 import libraries are only generated for RVCT-based armv5 + # builds on Windows + + t.id = "0104a" + t.name = "pdll_armv5_rvct" + t.command = command % "armv5" + t.targets = map(lambda p: p % "armv5", maintargets + armv5targets)[:] # Shallow, as we optionally extend later and then re-use + t.addbuildtargets('smoke_suite/test_resources/simple_dll/pbld.inf', map(lambda p: p % "armv5", buildtargets)) + t.mustmatch = mustmatch + t.mustnotmatch = mustnotmatch + t.run("linux") + if t.result == AntiTargetSmokeTest.SKIP: + t.targets.extend(map(lambda x: x % "armv5", abiv1libtargets)) + t.run("windows") + + t.id = "0104b" + t.name = "pdll_armv5_clean" + t.command = command % "armv5" + " clean" + t.targets = [] + t.mustmatch = [] + t.mustnotmatch = [] + t.run() + + t.id = "0104c" + t.name = "pdll_armv5_gcce" + t.command = command % "gcce_armv5" + t.targets = map(lambda p: p % "armv5", maintargets + armv5targets) + t.antitargets = map(lambda p: p % "armv5", abiv1libtargets) + t.addbuildtargets('smoke_suite/test_resources/simple_dll/pbld.inf', map(lambda p: p % "armv5", buildtargets)) + t.mustmatch = mustmatch + t.mustnotmatch = mustnotmatch + t.run() + + t.id = "0104d" + t.name = "pdll_armv5_gcce_clean" + t.command = command % "gcce_armv5" + " clean" + t.targets = [] + t.mustmatch = [] + t.mustnotmatch = [] + t.run() + + t.id = "0104e" + t.name = "pdll_armv7_rvct" + t.command = command % "armv7" + t.targets = map(lambda p: p % "armv7", maintargets)[:] # Shallow, as we optionally extend later and then re-use + t.addbuildtargets('smoke_suite/test_resources/simple_dll/pbld.inf', map(lambda p: p % "armv7", buildtargets)) + t.mustmatch = mustmatch + t.mustnotmatch = mustnotmatch + t.run() + + t.id = "0104f" + t.name = "pdll_armv7_clean" + t.command = command % "armv7" + " clean" + t.targets = [] + t.mustmatch = [] + t.mustnotmatch = [] + t.run() + + t.id = "0104g" + t.name = "pdll_armv7_gcce" + t.command = command % "arm.v7.udeb.gcce4_3_2 -c arm.v7.urel.gcce4_3_2" + t.targets = map(lambda p: p % "armv7", maintargets) + t.antitargets = map(lambda p: p % "armv7", abiv1libtargets) + t.addbuildtargets('smoke_suite/test_resources/simple_dll/pbld.inf', map(lambda p: p % "armv7", buildtargets)) + t.mustmatch = mustmatch + t.mustnotmatch = mustnotmatch + t.run() + + t.id = "104" + t.name = "pdll_arm" + t.print_result() + return t diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/test/smoke_suite/pdll_winscw.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/test/smoke_suite/pdll_winscw.py Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,39 @@ +# +# 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: +# + +from raptor_tests import SmokeTest + +def run(): + t = SmokeTest() + t.id = "105" + t.name = "pdll_winscw" + t.command = "sbs -b smoke_suite/test_resources/simple_dll/pbld.inf -c winscw" + t.targets = [ + "$(EPOCROOT)/epoc32/release/winscw/udeb/createstaticpdll.lib", + "$(EPOCROOT)/epoc32/release/winscw/udeb/createstaticpdll.dll", + "$(EPOCROOT)/epoc32/release/winscw/urel/createstaticpdll.dll", + "$(EPOCROOT)/epoc32/release/winscw/urel/createstaticpdll.dll.map" + ] + t.addbuildtargets('smoke_suite/test_resources/simple_dll/pbld.inf', [ + "createstaticpdll_dll/winscw/udeb/CreateStaticDLL.o", + "createstaticpdll_dll/winscw/udeb/createstaticpdll.UID.CPP", + "createstaticpdll_dll/winscw/udeb/createstaticpdll_UID_.o", + "createstaticpdll_dll/winscw/urel/CreateStaticDLL.o", + "createstaticpdll_dll/winscw/urel/createstaticpdll.UID.CPP", + "createstaticpdll_dll/winscw/urel/createstaticpdll_UID_.o" + ]) + t.run() + return t diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/test/smoke_suite/qt.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/test/smoke_suite/qt.py Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,55 @@ +# +# 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: +# This test case requires install of Qt. + +from raptor_tests import SmokeTest + +def run(): + t = SmokeTest() + + t.description = "Ensure Raptor builds Qt applications successfully" + + t.id = "00xx" + t.name = "qt_apps" + t.command = "cd smoke_suite/test_resources/qt && qmake -spec symbian-sbsv2 && sbs" + t.targets = [ + "$(SBS_HOME)/test/smoke_suite/test_resources/qt/bld.inf", + "$(SBS_HOME)/test/smoke_suite/test_resources/qt/helloworld.loc", + "$(SBS_HOME)/test/smoke_suite/test_resources/qt/helloworld.rss", + "$(SBS_HOME)/test/smoke_suite/test_resources/qt/helloworld_reg.rss", + "$(SBS_HOME)/test/smoke_suite/test_resources/qt/helloworld_template.pkg", + "$(SBS_HOME)/test/smoke_suite/test_resources/qt/Makefile", + "$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe", + "$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe.map", + "$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe", + "$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe.map", + "$(EPOCROOT)/epoc32/release/winscw/udeb/helloworld.exe", + "$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe", + "$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe.map" + ] + t.addbuildtargets('smoke_suite/test_resources/qt/bld.inf', [ + "helloworld_exe/armv5/udeb/helloworld.o", + "helloworld_exe/armv5/udeb/helloworld.o.d", + "helloworld_exe/armv5/urel/helloworld.o", + "helloworld_exe/armv5/urel/helloworld.o.d", + "helloworld_exe/winscw/udeb/helloworld.o", + "helloworld_exe/winscw/udeb/helloworld.o.d", + "helloworld_exe/winscw/urel/helloworld.o", + "helloworld_exe/winscw/urel/helloworld.o.d" + ]) + t.run("windows") + + return t + diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/test/smoke_suite/test_resources/qt/helloworld.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/test/smoke_suite/test_resources/qt/helloworld.cpp Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,13 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QPushButton hello("Hello world!"); + hello.resize(100, 30); + + hello.show(); + return app.exec(); +} diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/test/smoke_suite/test_resources/qt/helloworld.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/test/smoke_suite/test_resources/qt/helloworld.pro Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,8 @@ + +TEMPLATE = app +TARGET = +DEPENDPATH += . +INCLUDEPATH += . + +# Input +SOURCES += helloworld.cpp diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICPDLLARM.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICPDLLARM.def Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,6 @@ +EXPORTS + _ZN10CMessenger11ShowMessageEv @ 1 NONAME + _ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME + _ZTI10CMessenger @ 3 NONAME + _ZTV10CMessenger @ 4 NONAME + diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICPDLLWINS.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICPDLLWINS.def Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,4 @@ +EXPORTS + ?ShowMessage@CMessenger@@QAEXXZ @ 1 NONAME ; ?ShowMessage@CMessenger@@QAEXXZ + ?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 2 NONAME ; ?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z + diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticPDLL.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticPDLL.mmp Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,50 @@ +/* +* 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 createstaticpdll.dll +TARGETTYPE pdll + +UID 0xE800004C +CAPABILITY All -TCB + + +VENDORID 0x70000001 + +SOURCEPATH . +SOURCE CreateStaticDLL.cpp + +#ifdef ARMV6 +SOURCE armv6_specific.cpp +#endif +#ifdef ARMV7 +SOURCE armv7_specific.cpp +#endif + +USERINCLUDE . +SYSTEMINCLUDE /epoc32/include + +LIBRARY euser.lib + +#if defined(WINS) + deffile ./CREATESTATICPDLLWINS.def +#elif defined(MARM) + deffile ./CREATESTATICPDLLARM.def +#endif +nostrictdef + +#include "../inc/macrotests.mmh" + diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/pbld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/pbld.inf Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,25 @@ +/* +* 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 +ARMV5 ARMV6 ARMV7 ARMV5SMP WINSCW + +PRJ_MMPFILES + +CreateStaticPDLL.mmp diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/test/timing_tests/parse_time_exports_mmps.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/test/timing_tests/parse_time_exports_mmps.py Thu Jan 14 16:29:37 2010 +0000 @@ -0,0 +1,77 @@ + +from raptor_tests import SmokeTest, ReplaceEnvs +import os + +def generate_files(): + try: + os.makedirs(ReplaceEnvs("$(SBS_HOME)/test/timing_tests/test_resources/parse_time")) + except: + pass + bldinf_path = ReplaceEnvs("$(SBS_HOME)/test/timing_tests/test_resources/parse_time/bld.inf") + bldinf = open(bldinf_path, "w") + bldinf_content = """prj_mmpfiles +""" + test_dir = ReplaceEnvs("$(SBS_HOME)/test/timing_tests/test_resources/parse_time") + for number in range(0, 250): + mmp_path = ("parse_timing_" + str(number).zfill(3) + ".mmp") + mmp_file = open((test_dir + "/" + mmp_path), "w") + mmp_file.write("""targettype none +""") + mmp_file.close() + bldinf_content += (mmp_path + "\n") + + bldinf_content += "\nprj_exports\n" + + for number1 in range(0, 10): + source_dir = ("export_source_" + str(number1)) + try: + os.mkdir(test_dir + "/" + source_dir) + except: + pass + + for number2 in range (0, 10): + source_file = ("/file_" + str(number2) + ".txt ") + export_file = open((test_dir + "/" + source_dir + source_file), "w") + export_file.write(str(number2)) + export_file.close() + + for number3 in range (0, 10): + dest_dir = ("epoc32/include/export_destination_" + \ + str(number1) + str(number2) + str(number3)) + + for number4 in range(0, 10): + bldinf_content += source_dir + source_file + dest_dir + \ + "/export_destination_" + str(number4) + "\n" + bldinf.write(bldinf_content) + bldinf.close() + + +def delete_files(): + import shutil + + test_dir = ReplaceEnvs("$(SBS_HOME)/test/timing_tests/test_resources/parse_time") + objects = os.listdir(test_dir) + for object in objects: + object_path = (test_dir + "/" + object) + if os.path.isfile(object_path): + os.remove(object_path) + else: + shutil.rmtree(object_path) + + +def run(): + + generate_files() + + t = SmokeTest() + + t.id = "1" + t.name = "parse_time_exports_mmps" + t.description = """Test to measure time taken to parse a large number of + exports and mmps""" + t.command = "sbs -b timing_tests/test_resources/parse_time/bld.inf -n " + \ + "-c armv5_urel --toolcheck=off --timing" + t.run() + + delete_files() + return t diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/test/unit_suite/raptor_data_unit.py --- a/sbsv2/raptor/test/unit_suite/raptor_data_unit.py Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/test/unit_suite/raptor_data_unit.py Thu Jan 14 16:29:37 2010 +0000 @@ -30,24 +30,18 @@ def SetEnv(self, name, value): - # set environment variable and remember the old value - - try: - old = os.environ[name] - self.envStack[name] = old - os.environ[name] = value - except KeyError: - self.envStack[name] = None # was not defined + # set environment variable and remember the old value (if there is one) + if os.environ.has_key(name): + self.envStack[name] = os.environ[name] + os.environ[name] = value def RestoreEnv(self, name): # put environment back to its state before SetEnv - saved = self.envStack[name] - - if saved == None: + if self.envStack.has_key(name): + os.environ[name] = self.envStack[name] + else: del os.environ[name] # was not defined - else: - os.environ[name] = saved def testSimpleSpecification(self): @@ -359,6 +353,32 @@ # test the Resolve wrt EPOCROOT varcfg = eval.Resolve("VARIANT_CFG") self.assertEqual(varcfg, "/C/variant/variant.cfg") + + def testProblematicEnvironment(self): + # ask for environment variable values that will break makefile parsing due to + # backslashes forming line continuation characters + self.SetEnv("ENVVAR_BSLASH_END1", "C:\\test1a\\;C:\\test1b\\") + self.SetEnv("ENVVAR_BSLASH_END2", "C:\\test2a\\;C:\\test2b\\\\") + self.SetEnv("ENVVAR_BSLASH_END3", "C:\\test3a\\;C:\\test3b\\\\\\") + var = raptor_data.Variant("my.var") + var.AddOperation(raptor_data.Env("ENVVAR_BSLASH_END1")) + var.AddOperation(raptor_data.Env("ENVVAR_BSLASH_END2")) + var.AddOperation(raptor_data.Env("ENVVAR_BSLASH_END3")) + + aRaptor = raptor.Raptor() + eval = aRaptor.GetEvaluator(None, var.GenerateBuildUnits(aRaptor.cache)[0]) + self.RestoreEnv("ENVVAR_BSLASH_END1") + self.RestoreEnv("ENVVAR_BSLASH_END2") + self.RestoreEnv("ENVVAR_BSLASH_END3") + + value = eval.Get("ENVVAR_BSLASH_END1") + self.assertEqual(value, "C:\\test1a\\;C:\\test1b\\\\") + + value = eval.Get("ENVVAR_BSLASH_END2") + self.assertEqual(value, "C:\\test2a\\;C:\\test2b\\\\") + + value = eval.Get("ENVVAR_BSLASH_END3") + self.assertEqual(value, "C:\\test3a\\;C:\\test3b\\\\\\\\") def testMissingEnvironment(self): # ask for an environment variable that is not set diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/util/install-windows/raptorinstallermaker.py --- a/sbsv2/raptor/util/install-windows/raptorinstallermaker.py Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/util/install-windows/raptorinstallermaker.py Thu Jan 14 16:29:37 2010 +0000 @@ -30,40 +30,51 @@ tempdir = "" parser = optparse.OptionParser() -parser.add_option("-s", "--sbs_home", dest="sbs_home", +parser.add_option("-s", "--sbs-home", dest="sbshome", + help="Path to use as SBS_HOME environment variable. If not present the script exits.") +parser.add_option("-w", "--win32-support", dest="win32support", help="Path to use as SBS_HOME environment variable. If not present the script exits.") (options, args) = parser.parse_args() -if options.sbs_home == None: +if options.sbshome == None: print "ERROR: no SBS_HOME passed in. Exiting..." sys.exit(2) +if options.win32support == None: + print "ERROR: no win32support directory specified. Unable to proceed. Exiting..." + sys.exit(2) +else: + # Required irectories inside the win32-support repository + win32supportdirs = ["bv", "cygwin", "mingw", "python252"] + for dir in win32supportdirs: + if not os.path.isdir(os.path.join(options.win32support, dir)): + print "ERROR: directory %s does not exist. Cannot build installer. Exiting..." + sys.exit(2) def parseconfig(xmlFile="raptorinstallermaker.xml"): pass -def generateinstallerversionheader(sbs_home = None): - os.environ["SBS_HOME"] = sbs_home - os.environ["PATH"] = os.path.join(os.environ["SBS_HOME"], "bin") + os.pathsep + os.environ["PATH"] +def generateinstallerversionheader(sbshome = None): + shellenv = os.environ.copy() + shellenv["PYTHONPATH"] = os.path.join(os.environ["SBS_HOME"], "python") - versioncommand = "sbs -v" + raptorversioncommand = "python -c \"import raptor_version; print raptor_version.numericversion()\"" - # Raptor version string looks like this - # sbs version 2.5.0 [2009-02-20 release] + # Raptor version is obtained from raptor_version module's numericversion function. sbs_version_matcher = re.compile(".*(\d+\.\d+\.\d+).*", re.I) # Create Raptor subprocess - sbs = subprocess.Popen(versioncommand, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) - + versioncommand = subprocess.Popen(raptorversioncommand, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=shellenv) + raptorversion = "" # Get all the lines matching the RE - for line in sbs.stdout.readlines(): + for line in versioncommand.stdout.readlines(): res = sbs_version_matcher.match(line) if res: raptorversion = res.group(1) print "Successfully determined Raptor version %s" % raptorversion - sbs.wait() # Wait for process to end + versioncommand.wait() # Wait for process to end raptorversion_nsis_header_string = "# Raptor version file\n\n!define RAPTOR_VERSION %s\n" % raptorversion @@ -94,11 +105,16 @@ global tempdir print "Cleaning up temporary directory %s" % tempdir shutil.rmtree(tempdir,True) + try: + os.remove("raptorversion.nsh") + print "Successfully deleted raptorversion.nsh." + except: + print "ERROR: failed to remove raptorversion.nsh - remove manually if needed." print "Done." makensispath = unzipnsis(".\\NSIS.zip") -generateinstallerversionheader(options.sbs_home) -nsiscommand = makensispath + " /DRAPTOR_LOCATION=%s raptorinstallerscript.nsi" % options.sbs_home +generateinstallerversionheader(options.sbshome) +nsiscommand = makensispath + " /DRAPTOR_LOCATION=%s /DWIN32SUPPORT=%s raptorinstallerscript.nsi" % (options.sbshome, options.win32support) print "nsiscommand = %s" % nsiscommand runmakensis(nsiscommand) cleanup() diff -r c02a2a09d864 -r bc8e1b2568a4 sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi --- a/sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi Thu Jan 14 16:03:18 2010 +0000 +++ b/sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi Thu Jan 14 16:29:37 2010 +0000 @@ -114,6 +114,14 @@ File /r /x distribution.policy.s60 ${RAPTOR_LOCATION}\schema\*.* SetOutPath "$INSTDIR\win32" File /r /x distribution.policy.s60 ${RAPTOR_LOCATION}\win32\*.* + SetOutPath "$INSTDIR\win32\bv" + File /r /x distribution.policy.s60 /x .hg ${WIN32SUPPORT}\bv\*.* + SetOutPath "$INSTDIR\win32\cygwin" + File /r /x distribution.policy.s60 /x .hg ${WIN32SUPPORT}\cygwin\*.* + SetOutPath "$INSTDIR\win32\mingw" + File /r /x distribution.policy.s60 /x .hg ${WIN32SUPPORT}\mingw\*.* + SetOutPath "$INSTDIR\win32\python252" + File /r /x distribution.policy.s60 /x .hg ${WIN32SUPPORT}\python252\*.* SetOutPath "$INSTDIR" File ${RAPTOR_LOCATION}\RELEASE-NOTES.txt