Author: sjg
Date: Fri Dec 23 02:57:00 2016
New Revision: 310437
URL: https://svnweb.freebsd.org/changeset/base/310437

Log:
  Update meta* from bmake-20161212

Modified:
  head/share/mk/dirdeps.mk
  head/share/mk/gendirdeps.mk
  head/share/mk/meta.stage.mk
  head/share/mk/meta2deps.py
  head/share/mk/meta2deps.sh

Modified: head/share/mk/dirdeps.mk
==============================================================================
--- head/share/mk/dirdeps.mk    Fri Dec 23 00:38:43 2016        (r310436)
+++ head/share/mk/dirdeps.mk    Fri Dec 23 02:57:00 2016        (r310437)
@@ -1,5 +1,5 @@
 # $FreeBSD$
-# $Id: dirdeps.mk,v 1.73 2016/08/15 19:28:13 sjg Exp $
+# $Id: dirdeps.mk,v 1.84 2016/11/27 02:44:34 sjg Exp $
 
 # Copyright (c) 2010-2013, Juniper Networks, Inc.
 # All rights reserved.
@@ -57,9 +57,12 @@
 #      .MAKE.DEPENDFILE_PREFIX) to refer to these makefiles to
 #      distinguish them from others.
 #      
-#      Each Makefile.depend file sets DEP_RELDIR to be the
-#      the RELDIR (path relative to SRCTOP) for its directory, and
-#      since each Makefile.depend file includes dirdeps.mk, this
+#      Before each Makefile.depend file is read, we set 
+#      DEP_RELDIR to be the the RELDIR (path relative to SRCTOP) for
+#      its directory, and DEP_MACHINE etc according to the .<target_spec>
+#      represented by the suffix of the corresponding target.
+#      
+#      Since each Makefile.depend file includes dirdeps.mk, this
 #      processing is recursive and results in .MAKE.LEVEL 0 learning the
 #      dependencies of the tree wrt the initial directory (_DEP_RELDIR).
 #
@@ -111,6 +114,29 @@
 #              # as we may need it to find Makefile.depend*
 #              TARGET_SPEC = ${TARGET_SPEC_VARS:@v@${$v:U}@:ts,}
 #      
+#      The following variables can influence the initial DIRDEPS
+#      computation with regard to the TARGET_SPECs that will be
+#      built.
+#      Most should also be considered by init.mk
+#      
+#      ONLY_TARGET_SPEC_LIST
+#              Defines a list of TARGET_SPECs for which the current
+#              directory can be built.
+#              If ALL_MACHINES is defined, we build for all the
+#              TARGET_SPECs listed.
+#
+#      ONLY_MACHINE_LIST
+#              As for ONLY_TARGET_SPEC_LIST but only specifies
+#              MACHINEs.
+#
+#      NOT_TARGET_SPEC_LIST
+#              A list of TARGET_SPECs for which the current
+#              directory should not be built.
+#
+#      NOT_MACHINE_LIST
+#              A list of MACHINEs the current directory should not be
+#              built for.
+#
 
 # touch this at your peril
 _DIRDEP_USE_LEVEL?= 0
@@ -172,9 +198,13 @@ DEP_$v ?= ${$v}
 # we compute below are fully qualified wrt DEP_TARGET_SPEC.
 # The makefiles may only partially specify (eg. MACHINE only),
 # so we need to construct a set of modifiers to fill in the gaps.
-# jot 10 should output 1 2 3 .. 10
-JOT ?= jot
-_tspec_x := ${${JOT} ${TARGET_SPEC_VARS:[#]}:L:sh}
+.if ${TARGET_SPEC_VARS:[#]} > 10
+# seriously? better have jot(1) or equivalent to produce suitable sequence
+_tspec_x := ${${JOT:Ujot} ${TARGET_SPEC_VARS:[#]}:L:sh}
+.else
+# we can provide the sequence ourselves
+_tspec_x := ${1 2 3 4 5 6 7 8 9 10:L:[1..${TARGET_SPEC_VARS:[#]}]}
+.endif
 # this handles unqualified entries
 M_dep_qual_fixes = C;(/[^/.,]+)$$;\1.$${DEP_TARGET_SPEC};
 # there needs to be at least one item missing for these to make sense
@@ -288,6 +318,18 @@ _DEP_RELDIR := ${DEP_RELDIR}
 
 .endif
 
+# DIRDEPS_CACHE can be very handy for debugging.
+# Also if repeatedly building the same target, 
+# we can avoid the overhead of re-computing the tree dependencies.
+MK_DIRDEPS_CACHE ?= no
+BUILD_DIRDEPS_CACHE ?= no
+BUILD_DIRDEPS ?= yes
+
+.if ${MK_DIRDEPS_CACHE} == "yes"
+# this is where we will cache all our work
+DIRDEPS_CACHE ?= 
${_OBJDIR:tA}/dirdeps.cache${.TARGETS:Nall:O:u:ts-:S,/,_,g:S,^,.,:N.}
+.endif
+
 # pickup customizations
 # as below you can use !target(_DIRDEP_USE) to protect things
 # which should only be done once.
@@ -306,8 +348,10 @@ SKIP_DIR.host += ${SKIP_HOSTDIR}
 
 DEP_SKIP_DIR = ${SKIP_DIR} \
        ${SKIP_DIR.${DEP_TARGET_SPEC}:U} \
-       ${SKIP_DIR.${DEP_MACHINE}:U} \
-       ${SKIP_DIRDEPS.${DEP_MACHINE}:U}
+       ${TARGET_SPEC_VARS:@v@${SKIP_DIR.${DEP_$v}:U}@} \
+       ${SKIP_DIRDEPS.${DEP_TARGET_SPEC}:U} \
+       ${TARGET_SPEC_VARS:@v@${SKIP_DIRDEPS.${DEP_$v}:U}@}
+
 
 NSkipDir = ${DEP_SKIP_DIR:${M_ListToSkip}}
 
@@ -345,7 +389,7 @@ _DIRDEP_USE:        .USE .MAKE
 .ifdef ALL_MACHINES
 # this is how you limit it to only the machines we have been built for
 # previously.
-.if empty(ONLY_MACHINE_LIST)
+.if empty(ONLY_TARGET_SPEC_LIST) && empty(ONLY_MACHINE_LIST)
 .if !empty(ALL_MACHINE_LIST)
 # ALL_MACHINE_LIST is the list of all legal machines - ignore anything else
 _machine_list != cd ${_CURDIR} && 'ls' -1 
${ALL_MACHINE_LIST:O:u:@m@${.MAKE.DEPENDFILE:T:R}.$m@} 2> /dev/null; echo
@@ -354,7 +398,7 @@ _machine_list != 'ls' -1 ${_CURDIR}/${.M
 .endif
 _only_machines := ${_machine_list:${NIgnoreFiles:UN*.bak}:E:O:u}
 .else
-_only_machines := ${ONLY_MACHINE_LIST}
+_only_machines := ${ONLY_TARGET_SPEC_LIST:U} ${ONLY_MACHINE_LIST:U}
 .endif
 
 .if empty(_only_machines)
@@ -363,30 +407,35 @@ _only_machines := ${TARGET_MACHINE:U${AL
 .endif
 
 .else                          # ! ALL_MACHINES
-# if ONLY_MACHINE_LIST is set, we are limited to that
+# if ONLY_TARGET_SPEC_LIST or ONLY_MACHINE_LIST is set, we are limited to that.
+# Note that ONLY_TARGET_SPEC_LIST should be fully qualified.
 # if TARGET_MACHINE is set - it is really the same as ONLY_MACHINE_LIST
 # otherwise DEP_MACHINE is it - so DEP_MACHINE will match.
+_only_machines := ${ONLY_TARGET_SPEC_LIST:U:M${DEP_MACHINE},*}
+.if empty(_only_machines)
 _only_machines := 
${ONLY_MACHINE_LIST:U${TARGET_MACHINE:U${DEP_MACHINE}}:M${DEP_MACHINE}}
 .endif
+.endif
 
 .if !empty(NOT_MACHINE_LIST)
 _only_machines := ${_only_machines:${NOT_MACHINE_LIST:${M_ListToSkip}}}
 .endif
+.if !empty(NOT_TARGET_SPEC_LIST)
+# we must first qualify
+_dm := ${DEP_MACHINE}
+_only_machines := ${_only_machines:M*,*} 
${_only_machines:N*,*:@DEP_MACHINE@${DEP_TARGET_SPEC}@:S,^,.,:${M_dep_qual_fixes:ts:}:O:u:S,^.,,}
+DEP_MACHINE := ${_dm}
+_only_machines := ${_only_machines:${NOT_TARGET_SPEC_LIST:${M_ListToSkip}}}
+.endif
+# clean up
+_only_machines := ${_only_machines:O:u}
 
 # make sure we have a starting place?
 DIRDEPS ?= ${RELDIR}
 .endif                         # target 
 
-# if repeatedly building the same target, 
-# we can avoid the overhead of re-computing the tree dependencies.
-MK_DIRDEPS_CACHE ?= no
-BUILD_DIRDEPS_CACHE ?= no
-BUILD_DIRDEPS ?= yes
-
 .if !defined(NO_DIRDEPS) && !defined(NO_DIRDEPS_BELOW)
 .if ${MK_DIRDEPS_CACHE} == "yes"
-# this is where we will cache all our work
-DIRDEPS_CACHE?= 
${_OBJDIR:tA}/dirdeps.cache${.TARGETS:Nall:O:u:ts-:S,/,_,g:S,^,.,:N.}
 
 # just ensure this exists
 build-dirdeps:
@@ -421,6 +470,7 @@ ${DIRDEPS_CACHE}:   .META .NOMETA_CMP
        } > ${.TARGET}.new
        +@MAKELEVEL=${.MAKE.LEVEL} DIRDEPS_CACHE=${DIRDEPS_CACHE} \
        DIRDEPS="${DIRDEPS}" \
+       TARGET_SPEC=${TARGET_SPEC} \
        MAKEFLAGS= ${.MAKE} -C ${_CURDIR} -f ${BUILD_DIRDEPS_MAKEFILE} \
        ${BUILD_DIRDEPS_TARGETS} BUILD_DIRDEPS_CACHE=yes \
        .MAKE.DEPENDFILE=.none \
@@ -490,8 +540,10 @@ _machines := ${_machines:O:u}
 _dm := ${DEP_MACHINE}
 # apply the same filtering that we do when qualifying DIRDEPS.
 # M_dep_qual_fixes expects .${MACHINE}* so add (and remove) '.'
-_machines := 
${_machines:@DEP_MACHINE@${DEP_TARGET_SPEC}@:S,^,.,:${M_dep_qual_fixes:ts:}:O:u:S,^.,,}
+# Again we expect that any already qualified machines are fully qualified.
+_machines := ${_machines:M*,*} 
${_machines:N*,*:@DEP_MACHINE@${DEP_TARGET_SPEC}@:S,^,.,:${M_dep_qual_fixes:ts:}:O:u:S,^.,,}
 DEP_MACHINE := ${_dm}
+_machines := ${_machines:O:u}
 .endif
 
 # reset each time through
@@ -523,7 +575,7 @@ _build_dirs += ${_machines:N${DEP_TARGET
 # these we reset each time through as they can depend on DEP_MACHINE
 DEP_DIRDEPS_FILTER = \
        ${DIRDEPS_FILTER.${DEP_TARGET_SPEC}:U} \
-       ${DIRDEPS_FILTER.${DEP_MACHINE}:U} \
+       ${TARGET_SPEC_VARS:@v@${DIRDEPS_FILTER.${DEP_$v}:U}@} \
        ${DIRDEPS_FILTER:U} 
 .if empty(DEP_DIRDEPS_FILTER)
 # something harmless
@@ -622,6 +674,19 @@ _dirdeps_checked.$d:
 .endif
 # Note: _build_all_dirs is fully qualifed so d:R is always the directory
 .if exists(${d:R})
+# we pass _DEP_TARGET_SPEC to tell the next step what we want
+_DEP_TARGET_SPEC := ${d:E}
+# some makefiles may still look at this
+_DEP_MACHINE := ${d:E:C/,.*//}
+# set these too in case Makefile.depend* uses them
+.if ${TARGET_SPEC_VARS:[#]} > 1
+_dtspec := ${_DEP_TARGET_SPEC:S/,/ /g}
+.for i in ${_tspec_x}
+DEP_${TARGET_SPEC_VARS:[$i]} := ${_dtspec:[$i]}
+.endfor
+.else
+DEP_MACHINE := ${_DEP_MACHINE}
+.endif
 # Warning: there is an assumption here that MACHINE is always 
 # the first entry in TARGET_SPEC_VARS.
 # If TARGET_SPEC and MACHINE are insufficient, you have a problem.
@@ -632,10 +697,6 @@ _qm := ${_m:C;(\.depend)$;\1.${d:E};:${M
 .if ${_debug_search}
 .info Looking for ${_qm}
 .endif
-# we pass _DEP_TARGET_SPEC to tell the next step what we want
-_DEP_TARGET_SPEC := ${d:E}
-# some makefiles may still look at this
-_DEP_MACHINE := ${d:E:C/,.*//}
 # set this "just in case" 
 # we can skip :tA since we computed the path above
 DEP_RELDIR := ${_m:H:S,${SRCTOP}/,,}
@@ -688,7 +749,7 @@ _src != cd ${.CURDIR} && for m in ${.MAK
 
 _src?= ${.MAKE.DEPENDFILE}
 
-.MAKE.DEPENDFILE_BOOTSTRAP_SED+= -e 's,${_src:E},${MACHINE},g'
+.MAKE.DEPENDFILE_BOOTSTRAP_SED+= -e 's/${_src:E:C/,.*//}/${MACHINE}/g'
 
 # just create Makefile.depend* for this dir
 bootstrap-this:        .NOTMAIN

Modified: head/share/mk/gendirdeps.mk
==============================================================================
--- head/share/mk/gendirdeps.mk Fri Dec 23 00:38:43 2016        (r310436)
+++ head/share/mk/gendirdeps.mk Fri Dec 23 02:57:00 2016        (r310437)
@@ -1,5 +1,5 @@
 # $FreeBSD$
-# $Id: gendirdeps.mk,v 1.30 2016/02/27 00:20:39 sjg Exp $
+# $Id: gendirdeps.mk,v 1.33 2016/10/11 22:37:28 sjg Exp $
 
 # Copyright (c) 2010-2013, Juniper Networks, Inc.
 # All rights reserved.
@@ -147,6 +147,9 @@ M2D_OBJROOTS += ${OBJTOP} ${_OBJROOT} ${
 .if defined(SB_OBJROOT)
 M2D_OBJROOTS += ${SB_OBJROOT}
 .endif
+.if defined(STAGE_ROOT)
+M2D_OBJROOTS += ${STAGE_ROOT}
+.endif
 .if ${.MAKE.DEPENDFILE_PREFERENCE:U${.MAKE.DEPENDFILE}:M*.${MACHINE}} == ""
 # meta2deps.py only groks objroot
 # so we need to give it what it expects

Modified: head/share/mk/meta.stage.mk
==============================================================================
--- head/share/mk/meta.stage.mk Fri Dec 23 00:38:43 2016        (r310436)
+++ head/share/mk/meta.stage.mk Fri Dec 23 02:57:00 2016        (r310437)
@@ -1,5 +1,5 @@
 # $FreeBSD$
-# $Id: meta.stage.mk,v 1.45 2016/05/26 03:59:09 sjg Exp $
+# $Id: meta.stage.mk,v 1.47 2016/12/07 23:07:49 sjg Exp $
 #
 #      @(#) Copyright (c) 2011, Simon J. Gerraty
 #
@@ -59,7 +59,7 @@ GENDIRDEPS_FILTER += Nnot-empty-is-impor
 
 LN_CP_SCRIPT = LnCp() { \
   rm -f $$2 2> /dev/null; \
-  { [ -z "$$mode" ] && ln $$1 $$2 2> /dev/null; } || \
+  { [ -z "$$mode" ] && ${LN:Uln} $$1 $$2 2> /dev/null; } || \
   cp -p $$1 $$2; }
 
 # a staging conflict should cause an error
@@ -220,19 +220,29 @@ stage_symlinks:   .dirdep
 .if !empty(STAGE_AS_SETS)
 CLEANFILES += ${STAGE_AS_SETS:@s@stage*$s@}
 
-STAGE_TARGETS += stage_as
+STAGE_TARGETS += stage_as stage_as_and_symlink
 
 # sometimes things need to be renamed as they are staged
 # each ${file} will be staged as ${STAGE_AS_${file:T}}
 # one could achieve the same with SYMLINKS
+# stage_as_and_symlink makes the original name a symlink to the new name
+# it is the same as using stage_as and stage_symlinks but ensures
+# both operations happen together
 .for s in ${STAGE_AS_SETS:O:u}
 STAGE_AS.$s ?= ${.ALLSRC:N.dirdep:Nstage_*}
+STAGE_AS_AND_SYMLINK.$s ?= ${.ALLSRC:N.dirdep:Nstage_*}
 
 stage_as:      stage_as.$s
 stage_as.$s:   .dirdep
        @${STAGE_AS_SCRIPT}; StageAs ${FLAGS.$@} 
${STAGE_FILES_DIR.$s:U${STAGE_DIR.$s}:${STAGE_DIR_FILTER}} ${STAGE_AS.$s:@f@$f 
${STAGE_AS_${f:tA}:U${STAGE_AS_${f:T}:U${f:T}}}@}
        @touch $@
 
+stage_as_and_symlink:  stage_as_and_symlink.$s
+stage_as_and_symlink.$s:       .dirdep
+       @${STAGE_AS_SCRIPT}; StageAs ${FLAGS.$@} 
${STAGE_FILES_DIR.$s:U${STAGE_DIR.$s}:${STAGE_DIR_FILTER}} 
${STAGE_AS_AND_SYMLINK.$s:@f@$f 
${STAGE_AS_${f:tA}:U${STAGE_AS_${f:T}:U${f:T}}}@}
+       @${STAGE_LINKS_SCRIPT}; StageLinks -s 
${STAGE_FILES_DIR.$s:U${STAGE_DIR.$s}:${STAGE_DIR_FILTER}} 
${STAGE_AS_AND_SYMLINK.$s:@f@${STAGE_AS_${f:tA}:U${STAGE_AS_${f:T}:U${f:T}}} 
$f@}
+       @touch $@
+
 .endfor
 .endif
 

Modified: head/share/mk/meta2deps.py
==============================================================================
--- head/share/mk/meta2deps.py  Fri Dec 23 00:38:43 2016        (r310436)
+++ head/share/mk/meta2deps.py  Fri Dec 23 02:57:00 2016        (r310437)
@@ -1,4 +1,3 @@
-# $FreeBSD$
 #!/usr/bin/env python
 
 from __future__ import print_function
@@ -38,7 +37,8 @@ We only pay attention to a subset of the
 
 """
 RCSid:
-       $Id: meta2deps.py,v 1.19 2016/04/02 20:45:40 sjg Exp $
+       $FreeBSD$
+       $Id: meta2deps.py,v 1.22 2016/12/12 19:07:42 sjg Exp $
 
        Copyright (c) 2011-2013, Juniper Networks, Inc.
        All rights reserved.
@@ -114,7 +114,7 @@ def abspath(path, cwd, last_dir=None, de
     if rpath:
         path = rpath
     if (path.find('/') < 0 or
-       path.find('./') > 0 or
+        path.find('./') > 0 or
         path.endswith('/..') or
         os.path.islink(path)):
         return os.path.realpath(path)
@@ -154,38 +154,38 @@ class MetaFile:
         """if name is set we will parse it now.
         conf can have the follwing keys:
 
-        SRCTOPS        list of tops of the src tree(s).
+        SRCTOPS list of tops of the src tree(s).
 
-        CURDIR the src directory 'bmake' was run from.
+        CURDIR  the src directory 'bmake' was run from.
 
-        RELDIR the relative path from SRCTOP to CURDIR
+        RELDIR  the relative path from SRCTOP to CURDIR
 
-        MACHINE        the machine we built for.
-               set to 'none' if we are not cross-building.
-               More specifically if machine cannot be deduced from objdirs.
+        MACHINE the machine we built for.
+                set to 'none' if we are not cross-building.
+                More specifically if machine cannot be deduced from objdirs.
 
         TARGET_SPEC
-               Sometimes MACHINE isn't enough.
+                Sometimes MACHINE isn't enough.
                 
         HOST_TARGET
-               when we build for the pseudo machine 'host'
-               the object tree uses HOST_TARGET rather than MACHINE.
+                when we build for the pseudo machine 'host'
+                the object tree uses HOST_TARGET rather than MACHINE.
 
         OBJROOTS a list of the common prefix for all obj dirs it might
-               end in '/' or '-'.
+                end in '/' or '-'.
 
-        DPDEPS names an optional file to which per file dependencies
-               will be appended.
-               For example if 'some/path/foo.h' is read from SRCTOP
-               then 'DPDEPS_some/path/foo.h +=' "RELDIR" is output.
-               This can allow 'bmake' to learn all the dirs within
-               the tree that depend on 'foo.h'
-
-       EXCLUDES
-               A list of paths to ignore.
-               ccache(1) can otherwise be trouble.
+        DPDEPS  names an optional file to which per file dependencies
+                will be appended.
+                For example if 'some/path/foo.h' is read from SRCTOP
+                then 'DPDEPS_some/path/foo.h +=' "RELDIR" is output.
+                This can allow 'bmake' to learn all the dirs within
+                the tree that depend on 'foo.h'
+
+        EXCLUDES
+                A list of paths to ignore.
+                ccache(1) can otherwise be trouble.
 
-        debug  desired debug level
+        debug   desired debug level
 
         debug_out open file to send debug output to (sys.stderr)
 
@@ -229,8 +229,9 @@ class MetaFile:
                     if objroot.endswith(e):
                         # this is not what we want - fix it
                         objroot = objroot[0:-len(e)]
-                        if e.endswith('/'):
-                            objroot += '/'
+
+                if objroot[-1] != '/':
+                    objroot += '/'
                 if not objroot in self.objroots:
                     self.objroots.append(objroot)
                     _objroot = os.path.realpath(objroot)
@@ -293,6 +294,9 @@ class MetaFile:
             return None
         for f in sort_unique(self.file_deps):
             print('DPDEPS_%s += %s' % (f, self.reldir), file=out)
+        # these entries provide for reverse DIRDEPS lookup
+        for f in self.obj_deps:
+            print('DEPDIRS_%s += %s' % (f, self.reldir), file=out)
 
     def seenit(self, dir):
         """rememer that we have seen dir."""
@@ -360,28 +364,28 @@ class MetaFile:
     def parse(self, name=None, file=None):
         """A meta file looks like:
         
-       # Meta data file "path"
-       CMD "command-line"
-       CWD "cwd"
-       TARGET "target"
-       -- command output --
-       -- filemon acquired metadata --
-       # buildmon version 3
-       V 3
-       C "pid" "cwd"
-       E "pid" "path"
-       F "pid" "child"
-       R "pid" "path"
-       W "pid" "path"
-       X "pid" "status"
-       D "pid" "path"
-       L "pid" "src" "target"
-       M "pid" "old" "new"
-       S "pid" "path"
-       # Bye bye
+        # Meta data file "path"
+        CMD "command-line"
+        CWD "cwd"
+        TARGET "target"
+        -- command output --
+        -- filemon acquired metadata --
+        # buildmon version 3
+        V 3
+        C "pid" "cwd"
+        E "pid" "path"
+        F "pid" "child"
+        R "pid" "path"
+        W "pid" "path"
+        X "pid" "status"
+        D "pid" "path"
+        L "pid" "src" "target"
+        M "pid" "old" "new"
+        S "pid" "path"
+        # Bye bye
 
-       We go to some effort to avoid processing a dependency more than once.
-       Of the above record types only C,E,F,L,R,V and W are of interest.
+        We go to some effort to avoid processing a dependency more than once.
+        Of the above record types only C,E,F,L,R,V and W are of interest.
         """
 
         version = 0                     # unknown
@@ -431,7 +435,6 @@ class MetaFile:
             pid = int(w[1])
             if pid != last_pid:
                 if last_pid:
-                    pid_cwd[last_pid] = cwd
                     pid_last_dir[last_pid] = self.last_dir
                 cwd = getv(pid_cwd, pid, self.cwd)
                 self.last_dir = getv(pid_last_dir, pid, self.cwd)
@@ -448,7 +451,8 @@ class MetaFile:
                 cwd = abspath(w[2], cwd, None, self.debug, self.debug_out)
                 if cwd.endswith('/.'):
                     cwd = cwd[0:-2]
-                self.last_dir = cwd
+                self.last_dir = pid_last_dir[pid] = cwd
+                pid_cwd[pid] = cwd
                 if self.debug > 1:
                     print("cwd=", cwd, file=self.debug_out)
                 continue
@@ -545,6 +549,9 @@ class MetaFile:
                 ddep = self.find_obj(objroot, dir, path, w[2])
                 if ddep:
                     self.add(self.obj_deps, ddep, 'obj')
+                    if self.dpdeps and objroot.endswith('/stage/'):
+                        sp = '/'.join(path.replace(objroot,'').split('/')[1:])
+                        self.add(self.file_deps, sp, 'file')
             else:
                 # don't waste time looking again
                 self.seenit(w[2])

Modified: head/share/mk/meta2deps.sh
==============================================================================
--- head/share/mk/meta2deps.sh  Fri Dec 23 00:38:43 2016        (r310436)
+++ head/share/mk/meta2deps.sh  Fri Dec 23 02:57:00 2016        (r310437)
@@ -1,4 +1,3 @@
-# $FreeBSD$
 #!/bin/sh
 
 # NAME:
@@ -53,7 +52,7 @@
 #      $SB/obj-i386/bsd/gnu/lib/csu
 #      $SB/obj-i386/bsd/gnu/lib/libgcc
 #      $SB/obj-i386/bsd/include
-#      $SB/obj-i386/bsd/lib/csu/i386-elf
+#      $SB/obj-i386/bsd/lib/csu/i386
 #      $SB/obj-i386/bsd/lib/libc
 #      $SB/src/bsd/include
 #      $SB/src/bsd/sys/i386/include
@@ -78,7 +77,8 @@
 
 
 # RCSid:
-#      $Id: meta2deps.sh,v 1.9 2015/04/03 18:23:25 sjg Exp $
+#      $FreeBSD$
+#      $Id: meta2deps.sh,v 1.12 2016/12/13 20:44:16 sjg Exp $
 
 # Copyright (c) 2010-2013, Juniper Networks, Inc.
 # All rights reserved.
@@ -256,7 +256,7 @@ meta2deps() {
        *)
            case "$lpid" in
            "") ;;
-           *) eval ldir_$lpid=$ldir cwd_$lpid=$cwd;;
+           *) eval ldir_$lpid=$ldir;;
            esac
            eval ldir=\${ldir_$pid:-$CWD} cwd=\${cwd_$pid:-$CWD}
            lpid=$pid
@@ -272,9 +272,11 @@ meta2deps() {
            esac
            # watch out for temp dirs that no longer exist
            test -d ${cwd:-/dev/null/no/such} || cwd=$CWD
+           eval cwd_$pid=$cwd
            continue
            ;;
-       F,*)  eval cwd_$path=$cwd ldir_$path=$ldir
+       F,*) # $path is new pid  
+           eval cwd_$path=$cwd ldir_$path=$ldir
            continue
            ;;    
        *)  dir=${path%/*}
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to