# HG changeset patch # User Dario Sestito # Date 1284567943 -3600 # Node ID 3517522ec7aa0490365cc88ef1aabc0ea402049b # Parent 72ff9b952200cd8b637aa8ccce7a2aa6c54b950f Fix No rule to make SC issue diff -r 72ff9b952200 -r 3517522ec7aa sbsv2/raptor/lib/flm/resource.flm --- a/sbsv2/raptor/lib/flm/resource.flm Fri Jul 09 11:31:02 2010 +0100 +++ b/sbsv2/raptor/lib/flm/resource.flm Wed Sep 15 17:25:43 2010 +0100 @@ -1,4 +1,4 @@ -# Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). +# 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" @@ -48,119 +48,115 @@ # Ensure that RELEASABLES and CLEANTARGETS cannot expand indefinitely in successive calls to this flm: CLEANTARGETS:= RELEASABLES:= -CREATABLEPATHS:= # There is only one resource header (.rsg) file and we only # make that if we are asked. RSGDIR:=$(EPOCROOT)/epoc32/include -# If there are multiple LANGUAGES then it is the last one in the list -# which produces the header. -HEADLANG:=$(lastword $(LANGUAGES:SC=sc)) ifneq ($(or $(HEADER),$(HEADERONLY)),) RESOURCEHEADER:=$(RSGDIR)/$(HEADER) + # If there are multiple LANGUAGES then it is the last one in the list + # which produces the header. + HEADLANG:=$(lastword $(LANGUAGES:SC=sc)) else - RESOURCEHEADER:= + HEADLANG:= + RESOURCEHEADER:= endif # we create intermediate .rpp and .d files -INTERBASE_TMP:=$(OUTPUTPATH)/$(TARGET_lower)_$(notdir $(basename $(SOURCE))) +INTERBASE:=$(OUTPUTPATH)/$(TARGET_lower)$(if $(TARGETPATH),_$(subst /,_,$(TARGETPATH)),) + +################################## localisation ###########################$(GNUMKDIR)############# +# Only make copies for full resource builds + +# Initialise to prevent RELEASABLES spill-over between calls +DESTRPP:= +INFOFILE:= + +ifeq ($(HEADERONLY),) + +RSSBASENAME:=$(call lowercase,$(basename $(notdir $(SOURCE)))) +DESTRPP:=$(EPOCROOT)/epoc32/localisation/$(RSSBASENAME)/rsc/$(RSSBASENAME).rpp +$(call makepath,$(EPOCROOT)/epoc32/localisation/$(RSSBASENAME)/rsc) + +INFOFILE:=$(EPOCROOT)/epoc32/localisation/group/$(RSSBASENAME).info +# If there are MULTIPLE languages then copy the .rpp for the last one +RPPLANG:=$(lastword $(LANGUAGES:SC=sc)) + +# Copy .rpp files from epoc32/build/ to epoc32/localisation/x/rsc/x.rpp and create .info files in localisation +define CreateRppAndInfo +ifeq ($(RESOURCE_$(call sanitise,$(SOURCE))),) +RESOURCE_$(call sanitise,$(SOURCE)):=1 + +RESOURCE:: $(DESTRPP) $(INFOFILE) + +$(DESTRPP): $(INTERBASE)_$(RPPLANG).rpp + $(call startrule,rppfilecopy,FORCESUCCESS) \ + $(GNUCP) $$< $$@ \ + $(call endrule,rppfilecopy) + +$(INFOFILE):: + @if [ ! -d $(EPOCROOT)/epoc32/localisation/group ]; then $(GNUMKDIR) -p $(EPOCROOT)/epoc32/localisation/group; fi + @if [ ! -f $$@ ]; then echo "DATADIR: /$(RSSBASENAME)" > $$@ ; fi + @echo -e "\n/z$(TARGETPATH)/$(TARGET_lower).rsc : $(RSSBASENAME).rpp" >> $$@ + +endif +endef + +$(eval $(call CreateRppAndInfo)) +endif +################################# end of localisation ################################### + +# make the output directories while reading makefile - some build engines prefer this +$(call makepath,$(INTERBASE)) # common pre-processor options - -# We really should be using -iquote with a recent cpp. This is a note for when we do update: -#CPPOPT:=-nostdinc -undef -Wno-trigraphs -D_UNICODE -include $(PRODUCT_INCLUDE)\ -# -I$(dir $(SOURCE)) $(foreach I, $(USERINCLUDE),-iquote $(I) ) $(foreach J,$(SYSTEMINCLUDE),-I $(J) ) - -CPPOPT:=-nostdinc -undef -Wno-trigraphs -D_UNICODE -include $(PRODUCT_INCLUDE)\ +CPPOPT:=-nostdinc -undef -D_UNICODE -include $(PRODUCT_INCLUDE)\ -I$(dir $(SOURCE)) $(foreach I, $(USERINCLUDE),-I$(I) ) -I- $(foreach J,$(SYSTEMINCLUDE),-I$(J) ) -CREATABLEPATHS:=$(CREATABLEPATHS) $(RSCDIR) $(RSGDIR) $(OUTPUTPATH) - -# We intend to generate the resource in an intermediate location and copy to the targetpath to -# ensure that when the "same" resource is built into separare target paths, it doesn't have to be -# completely recreated each time - just copied. -RSCCOPYDIRS:=$(RSCDIR) +CREATABLEPATHS:=$(RSCDIR) $(RSGDIR) $(OUTPUTPATH) # additional binary resource copies performed based on BINCOPYDIRS +RSCCOPYDIRS:= ifneq ($(BINCOPYDIRS),) - RSCCOPYDIRS:=$(RSCCOPYDIRS) $(subst //,/,$(patsubst %,%/$(if $(TARGETPATH),/z/$(TARGETPATH),),$(BINCOPYDIRS))) + RSCCOPYDIRS:=$(subst //,/,$(patsubst %,%/$(if $(TARGETPATH),/z/$(TARGETPATH),),$(BINCOPYDIRS))) + CREATABLEPATHS:=$(CREATABLEPATHS) $(RSCCOPYDIRS) endif -CREATABLEPATHS:=$(CREATABLEPATHS) $(RSCCOPYDIRS) ############################################################################### - - define preprocessresource -# $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 +# $(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 ...) ifeq ($(TARGET_$(call sanitise,$1)),) TARGET_$(call sanitise,$1):=1 - $(if $(FLMDEBUG),$$(info preprocessresource: $1 LANG:$2 dep $3)) - - - # Correct dependency information when a header file can't be found. - # If the c preprocessor can't find a dependency it appears as it did in the #include statement - # e.g. "filename.mbg" or "filename.rsg" in the dependency file. - -ifneq ($(NO_DEPEND_GENERATE),) - # This version minimises the size of dependency files, to contain only .mbg and .rsg deps. - # It allows resources to be built in the right order but doesn't impose the weight of - # of full dependency information which can overwhelm make in large builds. - # The strategy is filter lines which don't have .rsg or .mbg dependencies in them and - # to sift each line to leave out non-relevant things like other header files, .hrh - # files etc. In the end don't print anything at all if we did not find the target. + $(if $(FLMDEBUG),$(info preprocessresource: $(1) for $(2) LANG:$(3))) -define DEPENDENCY_CORRECTOR -{ $(DEPCRUNCH) --extensions rsg,mbg --assume '$$$$(EPOCROOT)/epoc32/include' ; } -endef - -else - # This can correct the dependencies by assuming that the file will be in epoc32\include as this is the default - DEPENDENCY_CORRECTOR:=$(GNUSED) -r 's% ([^ \/]+\.((rsg)|(mbg)))% $(EPOCROOT)\/epoc32\/include\/\1%ig' -endif - - - ifeq "$1" "$3" - RESOURCE_DEPS:: $1.d - - $1.d: $(SOURCE) + RESOURCE_DEPS:: $(1).d + $(1).d: $(SOURCE) $(call startrule,resourcedependencies,FORCESUCCESS) \ - $(GNUCPP) -DLANGUAGE_$2 -DLANGUAGE_$(subst sc,SC,$2) $(call makemacrodef,-D,$(MMPDEFS))\ - $(CPPOPT) $(SOURCE) -M -MG -MT"$1" | \ - $$(DEPENDENCY_CORRECTOR) >$$@ \ + $(GNUCPP) -C -DLANGUAGE_$(3) -DLANGUAGE_$(subst sc,SC,$(3)) $(call makemacrodef,-D,$(MMPDEFS))\ + $(CPPOPT) $(SOURCE) -M -MG -MT"$(1)" | \ + $(GNUSED) -r 's# ([^ \/]+\.((rsg)|(mbg)))# $(EPOCROOT)\/epoc32\/include\/\1#ig' > $(1).d \ $(call endrule,resourcedependencies) - $1 : $1.d - - else - $1 : $3 - endif - - $1: + $(1): $(1).d $(call startrule,resourcepreprocess,FORCESUCCESS) \ - $(GNUCPP) -C -DLANGUAGE_$2 -DLANGUAGE_$(subst sc,SC,$2) $(call makemacrodef,-D,$(MMPDEFS))\ + $(GNUCPP) -C -DLANGUAGE_$(3) -DLANGUAGE_$(subst sc,SC,$(3)) $(call makemacrodef,-D,$(MMPDEFS))\ $(CPPOPT) $(SOURCE) -o $$@ \ $(call endrule,resourcepreprocess) - endif - CLEANTARGETS:= $$(CLEANTARGETS) $1 + CLEANTARGETS:= $$(CLEANTARGETS) $(1) - ifeq "$(MAKEFILE_GROUP)" "RESOURCE" - ifeq "$1" "$3" - $(eval DEPENDFILENAME:=$1.d) - $(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME))) - - CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME) - ifneq "$(DEPENDFILE)" "" - ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" "" - ifeq "$(MAKEFILE_GROUP)" "RESOURCE" - -include $(DEPENDFILE) - endif - endif + $(eval DEPENDFILENAME:=$(1).d) + $(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME))) + + CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME) + ifneq "$(DEPENDFILE)" "" + ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" "" + -include $(DEPENDFILE) endif endif @@ -170,48 +166,55 @@ ############################################################################### define copyresource # $(1) is the source -# $(2) is the space separated list of destinations which must be filenames +# $(2) is the destination + +RELEASABLES:=$$(RELEASABLES) $(2) + + ifeq ($(TARGET_$(call sanitise,$2)),) + TARGET_$(call sanitise,$2):=1 - RELEASABLES:=$$(RELEASABLES) $(2) + RESOURCE:: $2 + ## perform additional copies of binaries + # + # Only certain builds require further copies of the generated resource binaries + # + $(2): $(1) + $(call startrule,resourcecopy,FORCESUCCESS) \ + $(GNUCP) $$< $$@ \ + $(call endrule,resourcecopy) - $(info $2) - + endif + endef # copyresource # ############################################################################### define generateresource -# $(1) is the intermediate resource filename with path e.g. /a/b/resource.rsc +# $(1) is the resource filename 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 + RELEASABLES:=$$(RELEASABLES) $(1) ifeq ($(TARGET_$(call sanitise,$1)),) TARGET_$(call sanitise,$1):=1 - $(if $(FLMDEBUG),$(info generateresource: $(1) from $(2) LANG:$(3)),) - $(if $(FLMDEBUG),$(info generateresource: copies: $(sort $(patsubst %,%/$(notdir $(1)),$(RSCCOPYDIRS))))) + $(if $(FLMDEBUG),$(info generateresource: $(1) from $(2) LANG:$(3)),) - CLEANTARGETS:=$$(CLEANTARGETS) $(1) RESOURCE:: $(1) $(1): $(2) $(RCOMP) $(call startrule,resourcecompile,FORCESUCCESS) \ - $(RCOMP) -m045,046,047 -u -o$(1) -s$(2) \ + $(RCOMP) -m045,046,047 -u -o$(1) -s$(2) \ $(call endrule,resourcecompile) endif - # Whether or not we have generated this resource for some other variant, check if there # are any new copies to be made for this variant. e.g. winscw requires that we make -# some extra copies. We tried to copy after running rcomp itself but we still need these -# targets for the sake of dependencies or, for example, if someone merely adds a new copy -# when the resource is up-to-date +# some extra copies. - $(call copyresource,$1,$(sort $(patsubst %,%/$4,$(RSCCOPYDIRS)))) - + $(foreach F,$(sort $(patsubst %,%/$(notdir $(1)),$(RSCCOPYDIRS))),$(call copyresource,$(1),$(F))) # individual source file compilation SOURCETARGET_$(call sanitise,$(SOURCE)): $(1) @@ -225,11 +228,11 @@ # $(2) is the preprocessed resource to make it from # $(3) is the language to use (eg. sc) - RELEASABLES:= $$(RELEASABLES) $(1) + RELEASABLES:= $$(RELEASABLES) $(1) ifeq ($(TARGET_$(call sanitise,$1)),) TARGET_$(call sanitise,$1):=1 - $(if $(FLMDEBUG),$(info resourceheader: $(1) from $(2) LANG:$(3))) + $(if $(FLMDEBUG),$(info resourceheader: $(1) from $(2) LANG:$(3))) RESOURCE:: $(1) @@ -252,28 +255,19 @@ # We always create at least the header # even if we sometimes don't create the resources ifneq ($(RESOURCEHEADER),) - $(eval $(call generateresourceheader,$(RESOURCEHEADER),$(INTERBASE_TMP)_$(HEADLANG).rpp,$(HEADLANG))) + $(eval $(call generateresourceheader,$(RESOURCEHEADER),$(INTERBASE)_$(HEADLANG).rpp,$(HEADLANG))) endif -# The one on which the others will depend i.e. they will -# "sit in it's dependency slipstream" or in other words -# We only have to make one dependency file because all of -# the other languages will benefit from the dependency file -# belonging to this language. -PRIMARYRPPFILE:=$(INTERBASE_TMP)_$(HEADLANG).rpp 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,$(L),$(PRIMARYRPPFILE)))) - - ifeq "$(MAKEFILE_GROUP)" "RESOURCE" - $(foreach L,$(LANGUAGES:SC=sc),$(eval $(call generateresource,$(INTERBASE_TMP).r$(L),$(INTERBASE_TMP)_$(L).rpp,$(L),$(TARGET_lower).r$(L)))) - endif + $(foreach L,$(LANGUAGES:SC=sc),$(eval $(call preprocessresource,$(INTERBASE)_$(L).rpp,$(RESBASE).r$(L),$(L)))) + $(foreach L,$(LANGUAGES:SC=sc),$(eval $(call generateresource,$(RESBASE).r$(L),$(INTERBASE)_$(L).rpp,$(L)))) else # No resources are going to be made so unless we specifically ask for it, there will be no # preprocessed file from which to create the header: - $(eval $(call preprocessresource,$(INTERBASE_TMP)_$(HEADLANG).rpp,,$(HEADLANG),$(PRIMARYRPPFILE))) + $(eval $(call preprocessresource,$(INTERBASE)_$(HEADLANG).rpp,,$(HEADLANG))) endif @@ -283,10 +277,10 @@ ifneq ($(RFIFILE),) RESOURCE:: $(RFIFILE) RELEASABLES:=$(RELEASABLES) $(RFIFILE) - CREATABLEPATHS:=$(CREATABLEPATHS) $(dir $(RFIFILE))/ + CREATABLEPATHS:=$(CREATABLEPATHS) $(dir $(RFIFILE)) - RPPFILES:=$(foreach L,$(LANGUAGES:SC=sc),$(INTERBASE_TMP)_$(L).rpp) - $(eval $(call generaterfifile,$(RFIFILE),$(RPPFILES),$(PRIMARYRPPFILE).d)) + RPPFILES:=$(foreach L,$(LANGUAGES:SC=sc),$(INTERBASE)_$(L).rpp) + $(eval $(call generaterfifile,$(RFIFILE),$(RPPFILES),$(addsuffix .d,$(RPPFILES)))) endif