Ignore:
Timestamp:
Dec 18, 2005, 2:52:47 PM (20 years ago)
Author:
bird
Message:

Big command dependency job. More installation stuff.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kBuild/footer.kmk

    r353 r380  
    4747_DEPFILES :=
    4848
     49# included dependency files.
     50_DEPFILES_INCLUDED :=
     51
     52
    4953# All kind of output files except for _OBJS and _DEPFILES.
    5054# Compiling or linking definition outputting other things that $@ and any
     
    6367_SYSMODS  :=
    6468_INSTALLS :=
     69_INSTALLS_DIRS :=
    6570_OTHERS   :=
    66 _DIRS     := $(PATH_TARGET)/
     71_DIRS     := $(PATH_TARGET)/ $(PATH_TARGET)
    6772_IMPORT_LIBS :=
    6873
     
    366371$(foreach sdk, $(_SDKS), $(eval $(value def_sdks_include_one)))
    367372
     373
    368374#
    369375# Object processing.
    370376#
    371377
    372 ## Generates the '::' rule for building all objects of a source file.
     378## wrapper the compile command dependency check.
     379ifndef NO_COMPILE_CMDS_DEPS
     380_DEP_COMPILE_CMDS = $(if $(subst $(strip $($(target)_$(source)_CMDS_PREV_)),,$(strip $($(target)_$(source)_CMDS_))),FORCE,)
     381else
     382_DEP_COMPILE_CMDS =
     383endif
     384
     385## Generates the rules for building a specific object, and the '::' aliases
     386# for building a source file.
    373387# @param    $(obj)    The object file.
    374 define def_target_obj_rule
     388define def_target_source_rule
     389$(obj) $($(target)_$(source)_OUTPUT_): \
     390                $($(target)_$(source)_DEPEND_) \
     391                $(_DEP_COMPILE_CMDS) \
     392                | \
     393                $($(target)_$(source)_DEPORD_)
     394        $(call MSG_L1,Creating $$@)
     395        $(RM) -f $(dep) $(out) $($(target)_$(source)_OUTPUT_)
     396        $(custom_pre)
     397               
     398$($(target)_$(source)_CMDS_)
     399
     400        $(custom_post)
     401ifndef NO_COMPILE_CMDS_DEPS
     402        @$(APPEND) "$(dep)"
     403        @$(APPEND) "$(dep)" 'define $(target)_$(source)_CMDS_PREV_'
     404        @$(APPEND) "$(dep)" '$(subst $(NL),'$(NL)$(TAB)@$(APPEND) "$(dep)" ',$($(target)_$(source)_CMDS_))'
     405        @$(APPEND) "$(dep)" 'endef'
     406endif   
     407
    375408$(basename $(notdir $(obj))).o::
    376409        + $$(MAKE) -B -f $$(MAKEFILE) $(obj)
     
    378411        + $$(MAKE) -B -f $$(MAKEFILE) $(obj)
    379412endef
     413
     414
     415## wrapper the link command dependency check.
     416ifndef NO_COMPILE_CMDS_DEPS
     417_DEP_LINK_CMDS = $(if $(subst $(strip $($(target)_CMDS_PREV_)),,$(strip $($(target)_CMDS_))),FORCE,)
     418else
     419_DEP_LINK_CMDS =
     420endif
     421
     422## Generate the link rule for a target.
     423# @param    $(target)               The normalized target name.
     424# @param    $(dirdep)               Directories we depend upon begin created before linking.
     425# @param    $(dep)                  The name of the dependency file.
     426# @param    $(out)
     427# @param    $($(target)_OUTPUT_)    Output files from the link.
     428# @param    $($(target)_DEPEND_)        Dependencies.
     429# @param    $($(target)_DEPORD_)    Dependencies which should only affect build order.
     430# @param    $($(target)_CMDS_)      The link commands.
     431# @param    $($(target)_CMDS_PREV_) The link commands from the previous run.
     432define def_link_rule
     433$(out) $($(target)_OUTPUT_): \
     434                $($(target)_DEPEND_) \
     435                $(_DEP_LINK_CMDS) \
     436                | \
     437                $($(target)_DEPORD_)
     438        $(call MSG_L1,Creating $$@)
     439        $(RM) -f $(dep) $($(target)_OUTPUT_)
     440        $(custom_pre)
     441               
     442$($(target)_CMDS_)
     443
     444        $(custom_post)
     445ifndef NO_LINK_CMDS_DEP
     446        @$(APPEND) "$(dep)" 'define $(target)_CMDS_PREV_'
     447        @$(APPEND) "$(dep)" '$(subst $(NL),'$(NL)$(TAB)@$(APPEND) "$(dep)" ',$($(target)_CMDS_))'
     448        @$(APPEND) "$(dep)" 'endef'
     449endif   
     450
     451$(basename $(notdir $(out)))::
     452        + $$(MAKE) -B -f $$(MAKEFILE) $(out)
     453endef
     454
     455
     456## Generate the link & lib install rule
     457# @param    $(target)   Normalized target name.
     458# @param    $(out)      The build target.
     459# @param    $(INSTARGET_$(target))  The installation targets.
     460# @param    $(mode)     The file mode (optional)
     461define def_link_install_rule
     462$(INSTARGET_$(target)) : $(out) | $(call DIRDEP,$(dir $(INSTARGET_$(target))))
     463        $(INSTALL) $$(if $(mode),-m $(mode)) $(out) $$@
     464endef
     465
    380466
    381467
     
    628714        $(SUFF_OBJ))
    629715obj         := $(outbase)$(objsuff)
    630 dep         := $(outbase)$(SUFF_DEP)
    631716deps        := \
    632717        $($(target)_$(source)_DEPS)\
     
    645730        $($(target)_DEPS.$(bld_trg_cpu))
    646731
     732# dependencies
     733dep         := $(obj)$(SUFF_DEP)
     734ifndef NO_COMPILE_DEPS
     735_DEPFILES_INCLUDED += $(dep)
     736$(if $(wildcard $(dep)),$(eval include $(dep)))
     737endif
    647738
    648739#$ (warning dbg: target=$(target) source=$(source) tool=$(tool) obj=$(obj) dep=$(dep) flags=$(flags) defs=$(defs) incs=$(incs) dirdep=$(dirdep) outbase=$(outbase) objsuff=$(objsuff) deps=$(deps))
    649 ifndef TOOL_$(tool)_COMPILE_$(type)
     740ifndef TOOL_$(tool)_COMPILE_$(type)_CMDS
    650741$(warning kBuild: tools: \
    651742        1 $($(target)_$(source)_$(type)TOOL.$(bld_trg)) \
     
    665756        15 $(TOOL.$(bld_trg)) \
    666757        16 $(TOOL) )
    667 $(error kBuild: TOOL_$(tool)_COMPILE_$(type) is not defined. source=$(source) target=$(target) )
    668 endif
    669 
    670 # generate the rules
    671 $(eval $(TOOL_$(tool)_COMPILE_$(type)))
    672 
    673 $(eval $(def_target_obj_rule))
    674 
     758$(error kBuild: TOOL_$(tool)_COMPILE_$(type)_CMDS is not defined. source=$(source) target=$(target) )
     759endif
     760
     761# call the tool
     762$(target)_$(source)_CMDS_   := $(TOOL_$(tool)_COMPILE_$(type)_CMDS)
     763$(target)_$(source)_OUTPUT_ := $(TOOL_$(tool)_COMPILE_$(type)_OUTPUT)
     764$(target)_$(source)_DEPEND_ := $(TOOL_$(tool)_COMPILE_$(type)_DEPEND) $(deps) $(source)
     765$(target)_$(source)_DEPORD_ := $(TOOL_$(tool)_COMPILE_$(type)_DEPORD) $(dirdep)
     766
     767# generate the compile rule.
     768$(eval $(def_target_source_rule))
     769
     770_OUT_FILES      += $($(target)_$(source)_OUTPUT_)
    675771$(target)_OBJS_ += $(obj)
    676 _DEPFILES       += $(dep)
    677772
    678773endef
     
    697792        ,$(eval $(value def_target_source_c_cpp_asm)) )
    698793
    699 endef
    700 
    701 ## Generate the link & lib install rule
    702 # @param    $(target)   Normalized target name.
    703 # @param    $(out)      The build target.
    704 # @param    $(INSTARGET_$(target))  The installation targets.
    705 define def_link_install_rule
    706 $(INSTARGET_$(target)) : $(out) | $(call DIRDEP,$(dir $(INSTARGET_$(target))))
    707         $(RM) -f $$@
    708         $(CP) $(out) $$@
    709794endef
    710795
     
    804889deps        := $($(target)_DEPS)
    805890
    806 lib     := $(out)
    807 libsuff := $(suff)
    808 $(eval $(TOOL_$(tool)_LINK_LIBRARY))
     891# dependency file
     892dep := $(out)$(SUFF_DEP)
     893ifndef NO_LINK_CMDS_DEP
     894_DEPFILES_INCLUDED += $(dep)
     895$(if $(wildcard $(dep)),$(eval include $(dep)))
     896endif
     897
     898# check that the tool is defined.
     899ifndef TOOL_$(tool)_LINK_LIBRARY_CMDS
     900$(warning kBuild: tools: \
     901        1 $($(target)_$(source)TOOL.$(bld_trg)) \
     902        2 $($(target)_$(source)TOOL) \
     903        3 $($(target)_TOOL.$(bld_trg)) \
     904        4 $($(target)_TOOL) \
     905        5 $($(source)TOOL) \
     906        6 $($(source)TOOL.$(bld_trg)) \
     907        7 $(TOOL.$(bld_trg)) \
     908        8 $(TOOL) )
     909$(error kBuild: TOOL_$(tool)_LINK_LIBRARY_CMDS isn't defined! target=$(target) )
     910endif
     911
     912# call the tool
     913$(target)_CMDS_   := $(TOOL_$(tool)_LINK_LIBRARY_CMDS)
     914$(target)_OUTPUT_ := $(TOOL_$(tool)_LINK_LIBRARY_OUTPUT)
     915$(target)_DEPEND_ := $(TOOL_$(tool)_LINK_LIBRARY_DEPEND) $(deps) $(objs)
     916$(target)_DEPORD_ := $(TOOL_$(tool)_LINK_LIBRARY_DEPORD) $(dirdep)
     917
     918# generate the link rule.               
     919$(eval $(def_link_rule))
    809920
    810921# installing and globals
    811922definst := $(PATH_LIB)
    812 typevar :=_LIBS
     923typevar := _LIBS
    813924$(eval $(value def_target_install_pluss))
    814925endef
    815926
    816927# Process libraries
     928mode := 0644
    817929$(foreach target, $(LIBRARIES) $(LIBRARIES.$(BUILD_TARGET)), $(eval $(value def_lib)))
    818930
     
    829941# @param    $(definst)  The default _INST value.
    830942# @param    $(typevar)  The name of the variable with all the root targets of its type.
    831 define def_link_prolog
     943define def_link_common
    832944# basics
    833945bld_type    := $(firstword $($(target)_BLD_TYPE)     $(BUILD_TYPE))
     
    9891101endif # NOINST
    9901102
    991 endef
    992 
    993 
    994 ##
    995 # Typical link epilog.
    996 #
    997 # @param        $(target)   Normalized target name.
    998 # @param        $(out)      The output file.
    999 define def_link_epilog
    1000 
    1001 _INSTALLS    += $(INSTARGET_$(target))
    1002 _OBJS        += $($(target)_OBJS_)
    1003 _OUT_FILES   += $(out)
    1004 _CLEAN_FILES += $($(target)_CLEAN)
    1005 
    1006 endef
    1007 
    1008 
    1009 #
    1010 # BLDPROGS
    1011 #
    1012 
    1013 ## Build program (one).
    1014 # @param    $(target)   Normalized target (program) name.
    1015 define def_bldprog
    1016 
    1017 # set NOINST if not forced installation.
    1018 ifndef $(target)_INST
    1019 $(target)_NOINST := 1
    1020 endif
    1021 
    1022 # prolog
    1023 $(eval $(value def_link_prolog))
    1024 
    1025 # body
    1026 ifndef TOOL_$(tool)_LINK_PROGRAM
    1027 $(warning kBuild: tools: \
    1028         1 $($(target)_$(source)TOOL.$(bld_trg)) \
    1029         2 $($(target)_$(source)TOOL) \
    1030         3 $($(target)_TOOL.$(bld_trg)) \
    1031         4 $($(target)_TOOL) \
    1032         5 $(TOOL.$(bld_trg)) \
    1033         6 $(TOOL) )
    1034 $(error kBuild: TOOL_$(tool)_LINK_PROGRAM is not defined. target=$(target) )
    1035 endif
    1036 $(eval $(TOOL_$(tool)_LINK_PROGRAM))
    1037 
    1038 # epilog
    1039 $(eval $(value def_link_epilog))
    1040 
    1041 endef
    1042 
    1043 # Process build programs.
    1044 EXT     := EXE
    1045 EXTPRE  := HOST
    1046 definst := $(PATH_BIN)
    1047 typevar := _BLDPROGS
    1048 bld_trg_base_var := PLATFORM
    1049 $(foreach target, $(BLDPROGS) $(BLDPROGS.$(BUILD_PLATFORM)), $(eval $(value def_bldprog)))
    1050 
    1051 
    1052 
    1053 #
    1054 # DLLS
    1055 #
    1056 
    1057 ## DLL (one).
    1058 # @param    $(target)   Normalized target (program) name.
    1059 define def_dll
    1060 
    1061 # prolog
    1062 $(eval $(value def_link_prolog))
    1063 
    1064 # body
    1065 ifndef TOOL_$(tool)_LINK_DLL
     1103# dependency file
     1104dep := $(outbase)$(SUFF_DEP)
     1105ifndef NO_LINK_CMDS_DEP
     1106_DEPFILES_INCLUDED += $(dep)
     1107$(if $(wildcard $(dep)),$(eval include $(dep)))
     1108endif
     1109
     1110# check that the tool is defined.
     1111ifndef TOOL_$(tool)_$(tool_do)_CMDS
    10661112$(warning kBuild: tools: \
    10671113        1 $($(target)_$(source)TOOL.$(bld_trg)) \
     
    10731119        7 $(TOOL.$(bld_trg)) \
    10741120        8 $(TOOL) )
    1075 $(error kBuild: TOOL_$(tool)_LINK_DLL is not defined. target=$(target) )
    1076 endif
    1077 $(eval $(TOOL_$(tool)_LINK_DLL))
    1078 
    1079 # epilog
    1080 $(eval $(value def_link_epilog))
    1081 
    1082 endef
     1121$(error kBuild: TOOL_$(tool)_$(tool_do)_CMDS isn't defined! target=$(target) )
     1122endif
     1123
     1124# call the tool
     1125$(target)_CMDS_   := $(TOOL_$(tool)_$(tool_do)_CMDS)
     1126$(target)_OUTPUT_ := $(TOOL_$(tool)_$(tool_do)_OUTPUT)
     1127$(target)_DEPEND_ := $(TOOL_$(tool)_$(tool_do)_DEPEND) $(deps) $(objs)
     1128$(target)_DEPORD_ := $(TOOL_$(tool)_$(tool_do)_DEPORD) $(dirdep)
     1129
     1130# generate the link rule.               
     1131$(eval $(def_link_rule))
     1132
     1133               
     1134# Update globals.
     1135_OBJS        += $($(target)_OBJS_)
     1136_OUT_FILES   += $($(target)_OUTPUT_) $(out)
     1137_CLEAN_FILES += $($(target)_CLEAN)
     1138_INSTALLS    += $(INSTARGET_$(target))
     1139
     1140endef
     1141
     1142
     1143#
     1144# BLDPROGS
     1145#
     1146
     1147## Build program (one).
     1148# @param    $(target)   Normalized target (program) name.
     1149define def_bldprog
     1150
     1151# set NOINST if not forced installation.
     1152ifndef $(target)_INST
     1153$(target)_NOINST := 1
     1154endif
     1155
     1156# do the usual stuff.
     1157$(eval $(value def_link_common))
     1158
     1159endef
     1160
     1161# Process build programs.
     1162EXT     := EXE
     1163EXTPRE  := HOST
     1164tool_do := LINK_PROGRAM
     1165definst := $(PATH_BIN)
     1166typevar := _BLDPROGS
     1167mode    := 0755
     1168bld_trg_base_var := PLATFORM
     1169$(foreach target, $(BLDPROGS) $(BLDPROGS.$(BUILD_PLATFORM)), $(eval $(value def_bldprog)))
     1170
     1171
     1172
     1173#
     1174# DLLS
     1175#
    10831176
    10841177# Process dlls
    10851178EXT     := DLL
    10861179EXTPRE  :=
     1180tool_do := LINK_DLL
    10871181definst := $(PATH_DLL)
    10881182typevar := _DLLS
     1183mode    := 0755
    10891184bld_trg_base_var := TARGET
    1090 $(foreach target, $(DLLS) $(DLLS.$(BUILD_TARGET)), $(eval $(value def_dll)))
    1091 
     1185$(foreach target, $(DLLS) $(DLLS.$(BUILD_TARGET)), $(eval $(value def_link_common)))
    10921186
    10931187
     
    11001194$(foreach target, $(IMPORT_LIBS) $(IMPORT_LIBS.$(BUILD_TARGET)), $(eval $(value def_lib)))
    11011195else
    1102 $(foreach target, $(IMPORT_LIBS) $(IMPORT_LIBS.$(BUILD_TARGET)), $(eval $(value def_dll)))
     1196$(foreach target, $(IMPORT_LIBS) $(IMPORT_LIBS.$(BUILD_TARGET)), $(eval $(value def_link_common)))
    11031197endif
    11041198$(foreach target, $(IMPORT_LIBS) $(IMPORT_LIBS.$(BUILD_TARGET)), \
     
    11091203# PROGRAMS
    11101204#
    1111 
    1112 ## Program (one).
    1113 # @param    $(target)   Normalized target (program) name.
    1114 define def_program
    1115 
    1116 # prolog
    1117 $(eval $(value def_link_prolog))
    1118 
    1119 # body
    1120 ifndef TOOL_$(tool)_LINK_PROGRAM
    1121 $(warning kBuild: tools: \
    1122         1 $($(target)_$(source)TOOL.$(bld_trg)) \
    1123         2 $($(target)_$(source)TOOL) \
    1124         3 $($(target)_TOOL.$(bld_trg)) \
    1125         4 $($(target)_TOOL) \
    1126         5 $($(source)TOOL) \
    1127         6 $($(source)TOOL.$(bld_trg)) \
    1128         7 $(TOOL.$(bld_trg)) \
    1129         8 $(TOOL) )
    1130 $(error kBuild: TOOL_$(tool)_LINK_PROGRAM is not defined. target=$(target) )
    1131 endif
    1132 $(eval $(TOOL_$(tool)_LINK_PROGRAM))
    1133 
    1134 # epilog
    1135 $(eval $(value def_link_epilog))
    1136 
    1137 endef
    11381205
    11391206# Process programs
    11401207EXT     := EXE
    11411208EXTPRE  :=
     1209tool_do := LINK_PROGRAM
    11421210definst := $(PATH_BIN)
    11431211typevar := _PROGRAMS
     1212mode    := 0755
    11441213bld_trg_base_var := TARGET
    1145 $(foreach target, $(PROGRAMS) $(PROGRAMS.$(BUILD_TARGET)), $(eval $(value def_program)))
     1214$(foreach target, $(PROGRAMS) $(PROGRAMS.$(BUILD_TARGET)), $(eval $(value def_link_common)))
    11461215
    11471216
     
    11501219# SYSMODS
    11511220#
    1152 
    1153 ## System module (one).
    1154 # @param    $(target)   Normalized target (program) name.
    1155 define def_sysmod
    1156 
    1157 # prolog
    1158 $(eval $(value def_link_prolog))
    1159 
    1160 # body
    1161 ifndef TOOL_$(tool)_LINK_SYSMOD
    1162 $(warning kBuild: tools: \
    1163         1 $($(target)_$(source)TOOL.$(bld_trg)) \
    1164         2 $($(target)_$(source)TOOL) \
    1165         3 $($(target)_TOOL.$(bld_trg)) \
    1166         4 $($(target)_TOOL) \
    1167         5 $($(source)TOOL) \
    1168         6 $($(source)TOOL.$(bld_trg)) \
    1169         7 $(TOOL.$(bld_trg)) \
    1170         8 $(TOOL) )
    1171 $(error kBuild: TOOL_$(tool)_LINK_SYSMOD is not defined. target=$(target) )
    1172 endif
    1173 $(eval $(TOOL_$(tool)_LINK_SYSMOD))
    1174 
    1175 # epilog
    1176 $(eval $(value def_link_epilog))
    1177 
    1178 endef
    11791221
    11801222# Process sysmods
    11811223EXT     := SYS
    11821224EXTPRE  :=
     1225tool_do := LINK_SYSMOD
    11831226definst := $(PATH_SYS)
    11841227typevar := _SYSMODS
     1228mode    := 0644
    11851229bld_trg_base_var := TARGET
    1186 $(foreach target, $(SYSMODS) $(SYSMODS.$(BUILD_TARGET)), $(eval $(value def_sysmod)))
     1230$(foreach target, $(SYSMODS) $(SYSMODS.$(BUILD_TARGET)), $(eval $(value def_link_common)))
    11871231
    11881232
     
    12011245# the install rule
    12021246$(insdst) : $(srcsrc) | $(call DIRDEP,$(dir $(insdst)))
    1203         $$(RM) -f $$@
     1247        $$(if $$(filter $(INSTALL),$(inscmd)),,$$(RM) -f $$@)
    12041248        $(inscmd)
    12051249endef
     
    12261270# _INST
    12271271ifdef $(srcsrc)_INST
    1228 inst = $(srcsrc)_INST
     1272inst := $(patsubst %/,%,$($(srcsrc)_INST))/$(dir $(srcdst))
    12291273else
    12301274ifdef $(target)_INST
    1231 inst = $(target)_INST
    1232 else
    1233 inst =
     1275inst := $(patsubst %/,%,$($(target)_INST))/$(dir $(srcdst))
     1276else
     1277inst := $(dir $(srcdst))
    12341278endif
    12351279endif
    12361280
    12371281# calc target
    1238 insdst := $(call $(instfun),$(srcdst),$(target),$($(inst)),$(PATH_INS))
     1282insdst := $(call $(instfun),$(srcdst),$(target),$(inst),$(PATH_INS))
    12391283#$(warning instfun=$(instfun) srcdst=$(srcdst) target=$(target) srcdst=$(srcsrc) inst=$(inst) => insdst=$(insdst))
    12401284
     
    12461290inscmd := $(call $(target)_INSTALLER,$(srcsrc),$(insdst),$(target))
    12471291else
    1248 inscmd := $$(CP) $(srcsrc) $(insdst)
     1292inscmd := $$(INSTALL) $(srcsrc) $(insdst)
    12491293endif
    12501294endif
     
    12621306$(insdst) : | $(call DIRDEP,$(dir $(insdst)))
    12631307        $$(RM) -f $$@
    1264         $$(LN_SYMLINK) $(srcsrc) $(insdst)
     1308        $$(LN_SYMLINK) $(symdst) $(insdst)
    12651309endef
    12661310
     
    12691313
    12701314# deal with '=>' in the source file name.
    1271 srcdst := $(subst =>, ,$(src))
    1272 srcsrc := $(firstword $(srcdst))
    1273 srcdst := $(word $(words $(srcdst)),$(srcdst))
     1315symdst := $(subst =>, ,$(src))
     1316symlnk := $(firstword $(symdst))
     1317symdst := $(word $(words $(symdst)),$(symdst))
    12741318
    12751319# _INSTFUN
    1276 ifdef $(srcsrc)_INSTFUN
    1277 instfun := $(srcsrc)_INSTFUN
     1320ifdef $(symlnk)_INSTFUN
     1321instfun := $(symlnk)_INSTFUN
    12781322else
    12791323ifdef $(target)_INSTFUN
     
    12851329
    12861330# _INST
    1287 ifdef $(srcsrc)_INST
    1288 inst = $(srcsrc)_INST
     1331ifdef $(symlnk)_INST
     1332inst := $(patsubst %/,%,$($(symlnk)_INST))/$(dir $(symlnk))
    12891333else
    12901334ifdef $(target)_INST
    1291 inst = $(target)_INST
    1292 else
    1293 inst =
     1335inst := $(patsubst %/,%,$($(target)_INST))/$(dir $(symlnk))
     1336else
     1337inst := $(dir $(symlnk))
    12941338endif
    12951339endif
    12961340
    12971341# calc target
    1298 insdst := $(call $(instfun),$(srcdst),$(target),$(inst),$(PATH_INS))
    1299 #$(warning srcsrc=$(srcsrc) srcdst=$(srcdst) insdst=$(insdst))
     1342insdst := $(call $(instfun),$(symlnk),$(target),$(inst),$(PATH_INS))
     1343#$(warning symlnk=$(symlnk) symdst=$(symdst) insdst=$(insdst) instfun=$(instfun) inst='$(inst)')
    13001344
    13011345# generate the rule (need double evaluation here)
     
    13041348INSTARGET_$(target) += $(insdst)
    13051349endef
     1350
     1351               
     1352## generate the install rule
     1353define def_install_directory_rule
     1354# the install rule
     1355$(insdst):
     1356        $(INSTALL) -d \
     1357                $(if $(uid),-o $(uid))\
     1358                $(if $(gid),-g $(gid))\
     1359                $(if $(mode),-m $(mode))\
     1360                $(insdst)
     1361               
     1362.NOTPARALLEL: $(insdst)
     1363endef
     1364               
     1365
     1366## create one directory
     1367define def_install_directory
     1368
     1369# _INST
     1370ifdef $(directory)_INST
     1371inst := $(PATH_INS)/$(patsubst %/,%,$($(directory)_INST))
     1372else
     1373ifdef $(target)_INST
     1374inst := $(PATH_INS)/$(patsubst %/,%,$($(target)_INST))
     1375else
     1376inst := $(PATH_INS)
     1377endif
     1378endif
     1379
     1380mode := $(firstword \
     1381        $($(target)_$(directory)_MODE.$(bld_trg)) \
     1382        $($(target)_$(directory)_MODE) \
     1383        $($(directory)_MODE.$(bld_trg)) \
     1384        $($(directory)_MODE) \
     1385        $($(target)_MODE.$(bld_trg)) \
     1386        $($(target)_MODE))
     1387uid := $(firstword \
     1388        $($(target)_$(directory)_UID.$(bld_trg)) \
     1389        $($(target)_$(directory)_UID) \
     1390        $($(directory)_UID.$(bld_trg)) \
     1391        $($(directory)_UID) \
     1392        $($(target)_UID.$(bld_trg)) \
     1393        $($(target)_UID))
     1394gid := $(firstword \
     1395        $($(target)_$(directory)_GID.$(bld_trg)) \
     1396        $($(target)_$(directory)_GID) \
     1397        $($(directory)_GID.$(bld_trg)) \
     1398        $($(directory)_GID) \
     1399        $($(target)_GID.$(bld_trg)) \
     1400        $($(target)_GID))
     1401
     1402insdst := $(inst)/$(directory)/
     1403#$(warning directory=$(directory) inst=$(inst) insdst=$(insdst) mode=$(mode) gid=$(gid) uid=$(uid))
     1404
     1405# generate the rule (need double evaluation here)
     1406$(eval $(def_install_directory_rule))
     1407
     1408INSTARGET_DIRS_$(target) += $(insdst)
     1409endef
     1410
    13061411
    13071412## process one install target.
     
    13131418
    13141419INSTARGET_$(target) :=
     1420INSTARGET_DIRS_$(target) :=
     1421
     1422$(foreach directory,$($(target)_DIRS) $($(target)_DIRS.$(bld_trg)) $($(target)_DIRS.$(bld_trg_arch)) $($(target)_DIRS.$(bld_trg_cpu)) $($(target)_DIRS.$(bld_type)), \
     1423        $(eval $(value def_install_directory)))
     1424
    13151425$(foreach src,$($(target)_SOURCES) $($(target)_SOURCES.$(bld_trg)) $($(target)_SOURCES.$(bld_trg_arch)) $($(target)_SOURCES.$(bld_trg_cpu)) $($(target)_SOURCES.$(bld_type)), \
    13161426        $(eval $(value def_install_src)))
     
    13191429        $(eval $(value def_install_symlink)))
    13201430
    1321 _INSTALLS  += $(INSTARGET_$(target))
     1431_INSTALLS += $(INSTARGET_$(target)) $($(target)_GOALS)
     1432_INSTALLS_DIRS += $(INSTARGET_DIRS_$(target))
    13221433endef
    13231434
     
    13421453#
    13431454_DIR_ALL := $(sort $(addsuffix /,$(patsubst %/,%,$(_DIRS))) $(dir $(_OUT_FILES) $(_OBJS) $(_INSTALLS)))
     1455$(foreach directory,$(_INSTALLS_DIRS), $(eval _DIR_ALL := $(filter-out $(directory),$(_DIR_ALL))))
     1456
    13441457
    13451458define def_mkdir_rule
     
    13631476#
    13641477do-clean:
    1365         $(RM) -f $(_OUT_FILES) $(_OBJS) $(_DEPFILES) $(_CLEAN_FILES) $(OTHER_CLEAN)
     1478        $(RM) -f $(_OUT_FILES) $(_OBJS) $(_DEPFILES) $(_DEPFILES_INCLUDED) $(_CLEAN_FILES) $(OTHER_CLEAN)
    13661479
    13671480
     
    14351548$(foreach makefile,$(MAKEFILES_AFTER_$(PASS))  $(MAKEFILES_AFTER_$(PASS).$(BUILD_TARGET)) ,$(eval $(def_pass_makefile)))
    14361549
    1437 ifdef KBUILD_SAFE_PARALLELL
     1550ifdef KBUILD_SAFE_PARALLEL
    14381551.NOTPARALLEL: pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_this
    14391552.PHONY:       pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_this pass_$(pass)_doit
     
    14661579# @param        $(prev_pass)    The previous pass name.
    14671580define def_pass_order
    1468 ifdef KBUILD_SAFE_PARALLELL
     1581ifdef KBUILD_SAFE_PARALLEL
    14691582.NOTPARALLEL: pass_$(pass)_order
    14701583.PHONY: pass_$(pass)_order
     
    15011614        + $(MAKE) -f $(firstword $(MAKEFILE_LIST)) all_recursive
    15021615
     1616# @todo make this a non-default pass!           
    15031617uninstall:
    15041618        $(RM) -f $(_INSTALLS)
     1619       
     1620install: pass_installs
    15051621
    15061622# misc shortcuts.
    1507 targets:   bldprogs libraries dlls programs sysmods others install
     1623targets:   bldprogs libraries dlls programs sysmods others installs
    15081624objects:   $(_OBJS)
    15091625bldprogs:  $(_BLDPROGS)
     
    15131629sysmods:   $(_SYSMODS)
    15141630others:    $(_OTHERS)
    1515 install $(_INSTALLS)
     1631installs:  $(_INSTALLS_DIRS) $(_INSTALLS)
    15161632
    15171633
     
    15321648        @$(ECHO) "  TARGET_$(target)=$(TARGET_$(target))" $(NLTAB)\
    15331649        @$(ECHO) "  INSTARGET_$(target)=$(INSTARGET_$(target))" $(NLTAB)\
    1534 $(foreach prop,$(PROPS_SINGLE) $(PROPS_ACCUMULATE) OBJS_, \
     1650$(foreach prop,$(PROPS_SINGLE) $(PROPS_ACCUMULATE) OBJS_ CLEAN, \
    15351651        $(eval _tmp:=$(firstword $($(target)_BLD_TRG) $(BUILD_TARGET))) \
    15361652        $(if $($(target)_$(prop).$(_tmp)),\
Note: See TracChangeset for help on using the changeset viewer.