svn commit: r250498 - projects/bmake/share/mk

Simon J. Gerraty sjg at FreeBSD.org
Sat May 11 05:10:32 UTC 2013


Author: sjg
Date: Sat May 11 05:10:31 2013
New Revision: 250498
URL: http://svnweb.freebsd.org/changeset/base/250498

Log:
  Bring meta2deps.sh closer to par with meta2deps.py

Modified:
  projects/bmake/share/mk/gendirdeps.mk
  projects/bmake/share/mk/meta2deps.sh

Modified: projects/bmake/share/mk/gendirdeps.mk
==============================================================================
--- projects/bmake/share/mk/gendirdeps.mk	Sat May 11 02:48:40 2013	(r250497)
+++ projects/bmake/share/mk/gendirdeps.mk	Sat May 11 05:10:31 2013	(r250498)
@@ -111,16 +111,24 @@ _py_d =
 .if ${META2DEPS:E} == "py"
 # we can afford to do this all the time.
 DPDEPS ?= no
-META2DEPS_CMD = ${_time} ${PYTHON} ${META2DEPS} ${_py_d} \
-	-R ${RELDIR} -H ${HOST_TARGET} \
-	${M2D_OBJROOTS:O:u:@o at -O $o@}
+META2DEPS_CMD = ${_time} ${PYTHON} ${META2DEPS} ${_py_d} 
+.if ${DPDEPS:tl} != "no"
+META2DEPS_CMD += -D ${DPDEPS}
+.endif
+META2DEPS_FILTER = sed 's,^src:,${SRCTOP}/,;s,^\([^/]\),${OBJTOP}/\1,' |
+.elif ${META2DEPS:E} == "sh"
+META2DEPS_CMD = ${_time} ${_sh_x} ${META2DEPS} OBJTOP=${_OBJTOP}
+.else
+META2DEPS_CMD ?= ${META2DEPS}
+.endif
 
 .if ${TARGET_OBJ_SPEC:U${MACHINE}} != ${MACHINE}
 META2DEPS_CMD += -T ${TARGET_OBJ_SPEC}
 .endif
-.if ${DPDEPS:tl} != "no"
-META2DEPS_CMD += -D ${DPDEPS}
-.endif
+META2DEPS_CMD += \
+	-R ${RELDIR} -H ${HOST_TARGET} \
+	${M2D_OBJROOTS:O:u:@o at -O $o@}
+
 
 M2D_OBJROOTS += ${OBJTOP} ${_OBJROOT} ${_objroot}
 .if defined(SB_OBJROOT)
@@ -136,13 +144,6 @@ META2DEPS_ARGS += MACHINE=none
 META2DEPS_CMD += -S ${SB_BACKING_SB}/src 
 M2D_OBJROOTS += ${SB_BACKING_SB}/${SB_OBJPREFIX}
 .endif
-META2DEPS_FILTER = sed 's,^src:,${SRCTOP}/,;s,^\([^/]\),${OBJTOP}/\1,' |
-.elif ${META2DEPS:E} == "sh"
-META2DEPS_CMD = ${_time} ${_sh_x} ${META2DEPS} \
-	OBJTOP=${_objtop} SB_OBJROOT=${_objroot}
-.else
-META2DEPS_CMD ?= ${META2DEPS}
-.endif
 
 # we are only interested in the dirs
 # sepecifically those we read something from.

Modified: projects/bmake/share/mk/meta2deps.sh
==============================================================================
--- projects/bmake/share/mk/meta2deps.sh	Sat May 11 02:48:40 2013	(r250497)
+++ projects/bmake/share/mk/meta2deps.sh	Sat May 11 05:10:31 2013	(r250498)
@@ -114,16 +114,89 @@ meta2dirs() {
     sort -u
 }
 
+add_list() {
+    sep=' '
+    suffix=
+    while :
+    do
+	case "$1" in
+	"|") sep="$1"; shift;;
+	-s) suffix="$2"; shift 2;;
+	*) break;;
+	esac
+    done
+    name=$1
+    shift
+    eval list="\$$name"
+    for top in "$@"
+    do
+	case "$sep$list$sep" in
+	*"$sep$top$suffix$sep"*) continue;;
+	esac
+	list="${list:+$list$sep}$top$suffix"
+    done
+    eval "$name=\"$list\""
+}
+
 meta2deps() {
     DPDEPS=
+    SRCTOPS=$SRCTOP
+    OBJROOTS=
     while :
     do
 	case "$1" in
 	*=*) eval export "$1"; shift;;
+	-a) MACHINE_ARCH=$2; shift 2;;
+	-m) MACHINE=$2; shift 2;;
+	-C) CURDIR=$2; shift 2;;
+	-H) HOST_TARGET=$2; shift 2;;
+	-S) add_list SRCTOPS $2; shift 2;;
+	-O) add_list OBJROOTS $2; shift 2;;
+	-R) RELDIR=$2; shift 2;;
+	-T) TARGET_SPEC=$2; shift 2;;
 	*) break;;
 	esac
     done
 
+    _th= _o=
+    case "$MACHINE" in
+    host) _ht=$HOST_TARGET;;
+    esac
+    
+    for o in $OBJROOTS
+    do
+	case "$MACHINE,/$o/" in
+	host,*$HOST_TARGET*) ;;
+	*$MACHINE*|*${TARGET_SPEC:-$MACHINE}*) ;;
+	*) add_list _o $o; continue;;
+	esac
+	for x in $_ht $TARGET_SPEC $MACHINE
+	do
+	    case "$o" in
+	    "") continue;;
+	    */$x/) add_list _o ${o%$x/}; o=;;
+	    */$x) add_list _o ${o%$x}; o=;;
+	    *$x/) add_list _o ${o%$x/}; o=;;
+	    *$x) add_list _o ${o%$x}; o=;;
+	    esac
+	done
+    done
+    OBJROOTS="$_o"
+
+    case "$OBJTOP" in
+    "")
+	for o in $OBJROOTS
+	do
+	    OBJTOP=$o${TARGET_SPEC:-$MACHINE}
+	    break
+	done
+	;;
+    esac
+    src_re=
+    obj_re=
+    add_list '|' -s '/*' src_re $SRCTOPS
+    add_list '|' -s '*' obj_re $OBJROOTS
+    
     [ -z "$RELDIR" ] && unset DPDEPS
     tf=/tmp/m2d$$-$USER
     rm -f $tf.*
@@ -165,7 +238,7 @@ meta2deps() {
 	esac
 
 	case "$op,$path" in
-	W,*srcrel) continue;;
+	W,*srcrel|*.dirdep) continue;;
 	C,*)
 	    case "$path" in
 	    /*) cwd=$path;;
@@ -180,8 +253,7 @@ meta2deps() {
 	    ;;	  
 	*)  dir=${path%/*}
 	    case "$path" in
-	    $SB/*|${SB_BACKING_SB:-$SB}/*) ;;
-	    $SB_OBJROOT*) ;;
+	    $src_re|$obj_re) ;;
 	    /*/stage/*) ;;
 	    /*) continue;;
 	    *)	for path in $ldir/$path $cwd/$path
@@ -213,7 +285,7 @@ meta2deps() {
 	esac
 	case "$dir" in
 	${CURDIR:-.}|${CURDIR:-.}/*|"") continue;;
-	$SRCTOP/*|${SB_BACKING_SB:-$SB}/src/*)
+	$src_re)
 	    # avoid repeating ourselves...
 	    case "$DPDEPS,$seensrc," in
 	    ,*)
@@ -239,7 +311,7 @@ meta2deps() {
 	[ -f $path ] || continue
 	case "$dir" in
 	$CWD) continue;;		# ignore
-	$SRCTOP/*|${SB_BACKING_SB:-$SB}/src/*)
+	$src_re)
 	    seenit="$seenit,$seen"
 	    echo $dir >> $tf.srcdep
 	    case "$DPDEPS,$reldir,$seensrc," in
@@ -265,7 +337,7 @@ meta2deps() {
 	fi
 	seenit="$seenit,$seen"
 	case "$dir" in
-	$SB/*|${SB_OBJROOT:-$SB/}*|${SB_BACKING_SB:-$SB}/*)
+	$obj_re)
 	    echo $dir;;
 	esac
     done > $tf.dirdep
@@ -281,7 +353,7 @@ meta2deps() {
 	    # qualified with .<machine> as needed.
 	    # We strip .$MACHINE though
 	    xargs cat < $f | sort -u |
-	    sed "s,^# ,,;s,^,$OBJTOP/,;s,\.$MACHINE\$,,"
+	    sed "s,^# ,,;s,^,$OBJTOP/,;s,\.${TARGET_SPEC:-$MACHINE}\$,,;s,\.$MACHINE\$,,"
 	    ;;
 	*)  sort -u $f;;
 	esac


More information about the svn-src-projects mailing list