Changeset 1407 for trunk/kBuild


Ignore:
Timestamp:
Mar 17, 2008, 9:24:04 PM (17 years ago)
Author:
bird
Message:

EXPAND_BY = overriding (the default) | appending | prepending; mostly untested, but doesn't seem to break anything.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kBuild/footer.kmk

    r1399 r1407  
    160160# @param    $(src)          Source (parent) object.
    161161# @param    $(trg)          Target (child) object.
    162 # @remark Not all properties has all the variations, but making the correct
    163 #         exceptions will only complicate matters and probably not gain much speed.
    164162define def_inherit_one
    165163ifdef $(src)_$(prop)
    166164 ifndef $(trg)_$(prop)
    167165  $(trg)_$(prop) = $($(src)_$(prop))
    168   #$ (warning dbg-inherit: $(trg)_$(prop) = $($(src)_$(prop)) )
     166  #$ (warning def_inherit_one: $(trg)_$(prop) = $($(src)_$(prop)) )
    169167 endif
    170168endif
    171169endef # def_inherit_one
     170
     171
     172# EXPAND_BY = overriding
    172173
    173174## Inherit one template property in a non-accumulative manner.
     
    175176# @param    $(src)          Source (parent) object.
    176177# @param    $(trg)          Target (child) object.
    177 # @remark Not all properties has all the variations, but making the correct
    178 #         exceptions will only complicate matters and probably not gain much speed.
    179 # @todo   Check how/if this differs from def_inherit_one.
    180 define def_inherit_one_now
     178define def_inherit_one_overriding_now_l
    181179ifdef $(src)_$(prop)
    182180 ifndef $(trg)_$(prop)
    183181  $(trg)_$(prop) := $($(src)_$(prop))
    184   #$ (warning dbg-inherit-now: $(trg)_$(prop) = $($(src)_$(prop)) )
     182  #$ (warning def_inherit_one_overriding_now_l: $(trg)_$(prop) = $($(src)_$(prop)) )
    185183 endif
    186184endif
    187 endef # def_inherit_one_now
     185endef # def_inherit_one_overriding_now_l
     186
     187## @copydoc def_inherit_one_overriding_now_l
     188define def_inherit_one_overriding_now_r
     189ifdef $(src)_$(prop)
     190 ifndef $(trg)_$(prop)
     191  $(trg)_$(prop) := $($(src)_$(prop))
     192  #$ (warning def_inherit_one_overriding_now_r: $(trg)_$(prop) = $($(src)_$(prop)) )
     193 endif
     194endif
     195endef # def_inherit_one_overriding_now_r
    188196
    189197## Inherit one template property in a non-accumulative manner, deferred expansion.
     
    192200# @param    $(trg)          Target
    193201# @remark This define relies on double evaluation
    194 define def_inherit_one_deferred
     202define def_inherit_one_overriding_deferred
    195203ifdef $(src)_$(prop)
    196204 ifndef $(trg)_$(prop)
    197205  $(trg)_$(prop) = $$($(src)_$(prop))
    198   #$ (warning dbg-inherit-def: $(trg)_$(prop) = $($(src)_$(prop)) )
     206  #$ (warning def_inherit_one_overriding_deferred: $(trg)_$(prop) = $($(src)_$(prop)) )
    199207 endif
    200208endif
    201 endef # def_inherit_one_deferred
     209endef # def_inherit_one_overriding_deferred
     210
     211## @copydoc def_inherit_one_overriding_deferred
     212define def_inherit_one_overriding_deferred_l
     213ifdef $(src)_$(prop)
     214 ifndef $(trg)_$(prop)
     215  $(trg)_$(prop) = $$($(src)_$(prop))
     216  #$ (warning def_inherit_one_overriding_deferred_l: $(trg)_$(prop) = $($(src)_$(prop)) )
     217 endif
     218endif
     219endef # def_inherit_one_overriding_deferred_l
     220
     221## @copydoc def_inherit_one_overriding_deferred
     222define def_inherit_one_overriding_deferred_r
     223ifdef $(src)_$(prop)
     224 ifndef $(trg)_$(prop)
     225  $(trg)_$(prop) = $$($(src)_$(prop))
     226  #$ (warning def_inherit_one_overriding_deferred_r: $(trg)_$(prop) = $($(src)_$(prop)) )
     227 endif
     228endif
     229endef # def_inherit_one_overriding_deferred_r
     230
     231
     232# EXPAND_BY = prepending
     233
     234## Inherit one template property in a prepending manner.
     235# @param    $(prop)         Property name
     236# @param    $(src)          Source (parent) object.
     237# @param    $(trg)          Target (child) object.
     238define def_inherit_one_prepending_now_l
     239ifdef $(src)_$(prop)
     240 $(trg)_$(prop) := $(trg)_$(prop) $($(src)_$(prop))
     241 #$ (warning def_inherit_one_prepending_now_l: $(trg)_$(prop) = $($(trg)_$(prop)) )
     242endif
     243endef # def_inherit_one_prepending_now_l
     244
     245## @copydoc def_inherit_one_prepending_now_l
     246define def_inherit_one_prepending_now_r
     247ifdef $(src)_$(prop)
     248 $(trg)_$(prop) := $($(src)_$(prop)) $(trg)_$(prop)
     249 #$ (warning def_inherit_one_prepending_now_r: $(trg)_$(prop) = $($(trg)_$(prop)) )
     250endif
     251endef # def_inherit_one_prepending_now_r
     252
     253## Inherit one template property in a non-accumulative manner, deferred expansion.
     254# @param    $(prop)         Property name
     255# @param    $(src)          Source
     256# @param    $(trg)          Target
     257# @remark This define relies on double evaluation
     258define def_inherit_one_prepending_deferred
     259ifdef $(src)_$(prop)
     260 ifndef $(trg)_$(prop)
     261  $(trg)_$(prop) = $$($(src)_$(prop))
     262  #$ (warning def_inherit_one_prepending_deferred: $(trg)_$(prop) = $($(src)_$(prop)) )
     263 endif
     264endif
     265endef # def_inherit_one_prepending_deferred
     266
     267## Inherit one template property in a prepending manner, deferred expansion.
     268# @param    $(prop)         Property name
     269# @param    $(src)          Source (parent) object.
     270# @param    $(trg)          Target (child) object.
     271define def_inherit_one_prepending_deferred_l
     272ifdef $(src)_$(prop)
     273 $(trg)_$(prop) <= $$($(src)_$(prop))
     274 #$ (warning def_inherit_one_prepending_deferred_l: $(trg)_$(prop) = $($(trg)_$(prop)) )
     275endif
     276endef # def_inherit_one_prepending_deferred_l
     277
     278## @copydoc def_inherit_one_prepending_deferred_l
     279define def_inherit_one_prepending_deferred_r
     280ifdef $(src)_$(prop)
     281  $(trg)_$(prop) += $$($(src)_$(prop))
     282  #$ (warning def_inherit_one_prepending_deferred_r: $(trg)_$(prop) = $($(trg)_$(prop)) )
     283endif
     284endef # def_inherit_one_prepending_deferred_r
     285
     286
     287# EXPAND_BY = appending
     288
     289## Inherit one template property in a appending manner.
     290# @param    $(prop)         Property name
     291# @param    $(src)          Source (parent) object.
     292# @param    $(trg)          Target (child) object.
     293define def_inherit_one_appending_now_l
     294ifdef $(src)_$(prop)
     295 $(trg)_$(prop) := $($(src)_$(prop)) $(trg)_$(prop)
     296 #$ (warning def_inherit_one_appending_now_l: $(trg)_$(prop) = $($(trg)_$(prop)) )
     297endif
     298endef # def_inherit_one_appending_now_l
     299
     300## @copydoc def_inherit_one_appending_now_l
     301define def_inherit_one_appending_now_r
     302ifdef $(src)_$(prop)
     303 $(trg)_$(prop) := $(trg)_$(prop) $($(src)_$(prop))
     304 #$ (warning def_inherit_one_appending_now_r: $(trg)_$(prop) = $($(trg)_$(prop)) )
     305endif
     306endef # def_inherit_one_appending_now_r
     307
     308## Inherit one template property in a non-accumulative manner, deferred expansion.
     309# @param    $(prop)         Property name
     310# @param    $(src)          Source
     311# @param    $(trg)          Target
     312# @remark This define relies on double evaluation
     313define def_inherit_one_appending_deferred
     314ifdef $(src)_$(prop)
     315 ifndef $(trg)_$(prop)
     316  $(trg)_$(prop) = $$($(src)_$(prop))
     317  #$ (warning def_inherit_one_appending_deferred: $(trg)_$(prop) = $($(src)_$(prop)) )
     318 endif
     319endif
     320endef # def_inherit_one_appending_deferred
     321
     322## Inherit one template property in a appending manner, deferred expansion.
     323# @param    $(prop)         Property name
     324# @param    $(src)          Source (parent) object.
     325# @param    $(trg)          Target (child) object.
     326define def_inherit_one_appending_deferred_l
     327ifdef $(src)_$(prop)
     328 $(trg)_$(prop) += $$($(src)_$(prop))
     329 #$ (warning def_inherit_one_appending_deferred_l: $(trg)_$(prop) = $($(trg)_$(prop)) )
     330endif
     331endef # def_inherit_one_appending_deferred_l
     332
     333## @copydoc def_inherit_one_appending_deferred_l
     334define def_inherit_one_appending_deferred_r
     335ifdef $(src)_$(prop)
     336  $(trg)_$(prop) <= $$($(src)_$(prop))
     337  #$ (warning def_inherit_one_appending_deferred_r: $(trg)_$(prop) = $($(trg)_$(prop)) )
     338endif
     339endef # def_inherit_one_appending_deferred_r
     340
     341
    202342
    203343## Generic inheritance for use with targets templates and tools.
    204 # @param    trg                 Object to consider for inheriting.
    205 # @param    src_prefix          What to prefix the value found in EXTENDS with to get the object.
    206 # @param    properties          List of the properties with straight expansion.
    207 # @param    properties_now      List of the properties with immediate expansion.
    208 # @param    properties_deferred List of the properties with deferred expansion (e.g. function).
     344# @param    trg                   Object to consider for inheriting.
     345# @param    src_prefix            What to prefix the value found in EXTENDS with to get the object.
     346# @param    properties            List of the properties with straight expansion.
     347# @param    properties_now_l      List of the properties with immediate expansion, accumulating on the left side.
     348# @param    properties_now_r      List of the properties with immediate expansion, accumulating on the right side.
     349# @param    properties_deferred   List of the properties with deferred expansion (e.g. function), non-accumulative .
     350# @param    properties_deferred_l List of the properties with deferred expansion (e.g. function), accumulating on the left side.
     351# @param    properties_deferred_r List of the properties with deferred expansion (e.g. function), accumulating on the right side.
    209352define def_inherit
    210353src := $(strip $($(trg)_EXTENDS))
     
    225368  endif
    226369
    227   # Inherit the properties and mark the trg done.
     370  # Get & check EXTENDS_BY.
     371  by = $(strip $($(trg)_EXTENDS_BY))
     372  ifeq ($(by),)
     373   by = overriding
     374  else ifn1of ($(by), overriding appending prepending)
     375   $(error kBuild: Invalid EXTENDS_BY value '$(by)' on '$(trg)'!)
     376  endif
     377
     378  # Inherit the properties.
    228379  #$ (warning def_inherit: trg=$(trg) src=$(src))
    229   $(foreach prop, $(properties),          $(eval $(def_inherit_one)))
    230   $(foreach prop, $(properties_now),      $(eval $(def_inherit_one_now)))
    231   $(foreach prop, $(properties_deferred), $(eval $(def_inherit_one_deferred)))
     380  $(foreach prop, $(properties),            $(eval $(def_inherit_one)))
     381  $(foreach prop, $(properties_now_l),      $(eval $(def_inherit_one_$(by)_now_l)))
     382  $(foreach prop, $(properties_now_r),      $(eval $(def_inherit_one_$(by)_now_r)))
     383  $(foreach prop, $(properties_deferred),   $(eval $(def_inherit_one_$(by)_deferred)))
     384  $(foreach prop, $(properties_deferred_l), $(eval $(def_inherit_one_$(by)_deferred_l)))
     385  $(foreach prop, $(properties_deferred_r), $(eval $(def_inherit_one_$(by)_deferred_r)))
     386
     387  # Mark the target as done.
    232388  $(trg)_EXTENDS_STATUS_ := 42
    233389 else
     
    241397
    242398
    243 ## 
     399##
    244400# Function for $(call)'ing.
    245 # @param    1   trgs                List of object to consider for inheriting.
    246 # @param    2   src_prefix          What to prefix the value found in EXTENDS with to get the object.
    247 # @param    3   properties          List of the properties with straight expansion.
    248 # @param    4   properties_now      List of the properties with immediate expansion.
    249 # @param    5   properties_deferred List of the properties with deferred expansion (e.g. function).
     401# @param    1   trg                   Object to consider for inheriting.
     402# @param    2   src_prefix            What to prefix the value found in EXTENDS with to get the object.
     403# @param    3   properties            List of the properties with straight expansion.
     404# @param    4   properties_now_l      List of the properties with immediate expansion, accumulating on the left side.
     405# @param    5   properties_now_r      List of the properties with immediate expansion, accumulating on the right side.
     406# @param    6   properties_deferred   List of the properties with deferred expansion (e.g. function), non-accumulative .
     407# @param    7   properties_deferred_l List of the properties with deferred expansion (e.g. function), accumulating on the left side.
     408# @param    8   properties_deferred_r List of the properties with deferred expansion (e.g. function), accumulating on the right side.
    250409define fn_inherit
    251 src_prefix          := $(2)
    252 properties          := $(3)
    253 properties_now      := $(4)
    254 properties_deferred := $(5)
     410src_prefix := $(2)
     411properties := $(3)
     412properties_now_l := $(4)
     413properties_now_r := $(5)
     414properties_deferred := $(6)
     415properties_deferred_l := $(7)
     416properties_deferred_r := $(8)
    255417$(foreach trg, $(1),$(eval $(value def_inherit)))
    256418endef
     
    347509
    348510src_prefix :=
     511properties_deferred_l :=
     512properties_deferred_r :=
     513
    349514## combines the specified properties $(1) with the $(_KEYWORDS).
    350515_COMB_KEY_PROP = $(1)  $(foreach keyword,$(_KEYWORDS), $(addsuffix .$(keyword), $(1)))
     
    352517# Fetches.
    353518properties          := $(call _COMB_KEY_PROP,$(PROPS_FETCHES_SINGLE))
    354 properties_now      := $(call _COMB_KEY_PROP,$(PROPS_FETCHES_ACCUMULATE_R) $(PROPS_FETCHES_ACCUMULATE_L))
     519properties_now_l    := $(call _COMB_KEY_PROP,$(PROPS_FETCHES_ACCUMULATE_L))
     520properties_now_r    := $(call _COMB_KEY_PROP,$(PROPS_FETCHES_ACCUMULATE_R))
    355521properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_FETCHES_DEFERRED))
    356522$(foreach trg, $(_ALL_FETCHES),$(eval $(value def_inherit)))
     
    358524## Patches. - not implemented yet.
    359525#properties          := $(call _COMB_KEY_PROP,$(PROPS_PATCHES_SINGLE))
    360 #properties_now      := $(call _COMB_KEY_PROP,$(PROPS_PATCHES_ACCUMULATE_R) $(PROPS_PATCHES_ACCUMULATE_L))
     526#properties_now_l    := $(call _COMB_KEY_PROP,$(PROPS_PATCHES_ACCUMULATE_L))
     527#properties_now_r    := $(call _COMB_KEY_PROP,$(PROPS_PATCHES_ACCUMULATE_R))
    361528#properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_PATCHES_DEFERRED))
    362529#$(foreach trg, $(_ALL_PATCHES),$(eval $(value def_inherit)))
     
    364531# Programs and build programs.
    365532properties          := $(call _COMB_KEY_PROP,$(PROPS_PROGRAMS_SINGLE))
    366 properties_now      := $(call _COMB_KEY_PROP,$(PROPS_PROGRAMS_ACCUMULATE_R) $(PROPS_PROGRAMS_ACCUMULATE_L))
     533properties_now_l    := $(call _COMB_KEY_PROP,$(PROPS_PROGRAMS_ACCUMULATE_L))
     534properties_now_r    := $(call _COMB_KEY_PROP,$(PROPS_PROGRAMS_ACCUMULATE_R))
    367535properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_PROGRAMS_DEFERRED))
    368536$(foreach trg, $(_ALL_BLDPROGS) $(_ALL_PROGRAMS),$(eval $(value def_inherit)))
     
    370538# Libraries and import libraries.
    371539properties          := $(call _COMB_KEY_PROP,$(PROPS_LIBRARIES_SINGLE))
    372 properties_now      := $(call _COMB_KEY_PROP,$(PROPS_LIBRARIES_ACCUMULATE_R) $(PROPS_LIBRARIES_ACCUMULATE_L))
     540properties_now_l    := $(call _COMB_KEY_PROP,$(PROPS_LIBRARIES_ACCUMULATE_L))
     541properties_now_r    := $(call _COMB_KEY_PROP,$(PROPS_LIBRARIES_ACCUMULATE_R))
    373542properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_LIBRARIES_DEFERRED))
    374 ifeq ($(filter-out nt os2 win win64 win32,$(BUILD_TARGET)),)
     543if1of ($(BUILD_TARGET), nt os2 win)
    375544 $(foreach trg, $(_ALL_LIBRARIES) $(_ALL_IMPORT_LIBS),$(eval $(value def_inherit)))
    376545else
     
    380549# DLLs.
    381550properties          := $(call _COMB_KEY_PROP,$(PROPS_DLLS_SINGLE))
    382 properties_now      := $(call _COMB_KEY_PROP,$(PROPS_DLLS_ACCUMULATE_R) $(PROPS_DLLS_ACCUMULATE_L))
     551properties_now_l    := $(call _COMB_KEY_PROP,$(PROPS_DLLS_ACCUMULATE_L))
     552properties_now_r    := $(call _COMB_KEY_PROP,$(PROPS_DLLS_ACCUMULATE_R))
    383553properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_DLLS_DEFERRED))
    384 ifeq ($(filter-out nt os2 win win64 win32,$(BUILD_TARGET)),)
     554if1of ($(BUILD_TARGET), nt os2 win)
    385555 $(foreach trg, $(_ALL_DLLS),$(eval $(value def_inherit)))
    386556else
     
    390560# System modules.
    391561properties          := $(call _COMB_KEY_PROP,$(PROPS_SYSMODS_SINGLE))
    392 properties_now      := $(call _COMB_KEY_PROP,$(PROPS_SYSMODS_ACCUMULATE_R) $(PROPS_SYSMODS_ACCUMULATE_L))
     562properties_now_l    := $(call _COMB_KEY_PROP,$(PROPS_SYSMODS_ACCUMULATE_L))
     563properties_now_r    := $(call _COMB_KEY_PROP,$(PROPS_SYSMODS_ACCUMULATE_R))
    393564properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_SYSMODS_DEFERRED))
    394565$(foreach trg, $(_ALL_SYSMODS),$(eval $(value def_inherit)))
     
    396567# Installs.
    397568properties          := $(call _COMB_KEY_PROP,$(PROPS_INSTALLS_SINGLE))
    398 properties_now      := $(call _COMB_KEY_PROP,$(PROPS_INSTALLS_ACCUMULATE_R) $(PROPS_INSTALLS_ACCUMULATE_L))
     569properties_now_l    := $(call _COMB_KEY_PROP,$(PROPS_INSTALLS_ACCUMULATE_L))
     570properties_now_r    := $(call _COMB_KEY_PROP,$(PROPS_INSTALLS_ACCUMULATE_R))
    399571properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_INSTALLS_DEFERRED))
    400572$(foreach trg, $(_ALL_INSTALLS),$(eval $(value def_inherit)))
     
    420592src_prefix := TEMPLATE_
    421593properties :=
    422 properties_now :=
    423 properties_deferred := $(call _COMB_KEY_PROP,$(PROPS_ALL))
     594properties_now_l :=
     595properties_now_r :=
     596properties_deferred   := $(call _COMB_KEY_PROP,$(PROPS_SINGLE) $(PROPS_DEFERRED))
     597properties_deferred_l := $(call _COMB_KEY_PROP,$(PROPS_ACCUMULATE_L))
     598properties_deferred_r := $(call _COMB_KEY_PROP,$(PROPS_ACCUMULATE_R))
    424599$(foreach trg, $(addprefix TEMPLATE_,$(_TEMPLATES)),$(eval $(value def_inherit)))
    425 
    426 # done.
    427 src_prefix :=
    428 properties :=
    429 properties_now :=
    430 properties_deferred :=
    431600
    432601ifdef KBUILD_PROFILE_SELF
     
    435604 _KBUILD_TS_PREV := $(_KBUILD_TS_NOW)
    436605endif
     606
     607
     608# done inheriting.
     609src_prefix :=
     610properties :=
     611properties_now_l :=
     612properties_now_r :=
     613properties_deferred :=
     614properties_deferred_l :=
     615properties_deferred_r :=
    437616
    438617
Note: See TracChangeset for help on using the changeset viewer.