13cbdda60SSimon J. Gerraty#!/bin/sh 23cbdda60SSimon J. Gerraty 33cbdda60SSimon J. Gerraty# NAME: 43cbdda60SSimon J. Gerraty# meta2deps.sh - extract useful info from .meta files 53cbdda60SSimon J. Gerraty# 63cbdda60SSimon J. Gerraty# SYNOPSIS: 73cbdda60SSimon J. Gerraty# meta2deps.sh SB="SB" "meta" ... 83cbdda60SSimon J. Gerraty# 93cbdda60SSimon J. Gerraty# DESCRIPTION: 103cbdda60SSimon J. Gerraty# This script looks each "meta" file and extracts the 113cbdda60SSimon J. Gerraty# information needed to deduce build and src dependencies. 123cbdda60SSimon J. Gerraty# 133cbdda60SSimon J. Gerraty# To do this, we extract the 'CWD' record as well as all the 143cbdda60SSimon J. Gerraty# syscall traces which describe 'R'ead, 'C'hdir and 'E'xec 153cbdda60SSimon J. Gerraty# syscalls. 163cbdda60SSimon J. Gerraty# 173cbdda60SSimon J. Gerraty# The typical meta file looks like:: 183cbdda60SSimon J. Gerraty#.nf 193cbdda60SSimon J. Gerraty# 203cbdda60SSimon J. Gerraty# # Meta data file "path" 213cbdda60SSimon J. Gerraty# CMD "command-line" 223cbdda60SSimon J. Gerraty# CWD "cwd" 233cbdda60SSimon J. Gerraty# TARGET "target" 243cbdda60SSimon J. Gerraty# -- command output -- 253cbdda60SSimon J. Gerraty# -- filemon acquired metadata -- 263cbdda60SSimon J. Gerraty# # buildmon version 2 273cbdda60SSimon J. Gerraty# V 2 283cbdda60SSimon J. Gerraty# E "pid" "path" 293cbdda60SSimon J. Gerraty# R "pid" "path" 303cbdda60SSimon J. Gerraty# C "pid" "cwd" 313cbdda60SSimon J. Gerraty# R "pid" "path" 323cbdda60SSimon J. Gerraty# X "pid" "status" 333cbdda60SSimon J. Gerraty#.fi 343cbdda60SSimon J. Gerraty# 353cbdda60SSimon J. Gerraty# The fact that all the syscall entry lines start with a single 363cbdda60SSimon J. Gerraty# character make these files quite easy to process using sed(1). 373cbdda60SSimon J. Gerraty# 383cbdda60SSimon J. Gerraty# To simplify the logic the 'CWD' line is made to look like a 393cbdda60SSimon J. Gerraty# normal 'C'hdir entry, and "cwd" is remembered so that it can 403cbdda60SSimon J. Gerraty# be prefixed to any "path" which is not absolute. 413cbdda60SSimon J. Gerraty# 423cbdda60SSimon J. Gerraty# If the "path" being read ends in '.srcrel' it is the content 433cbdda60SSimon J. Gerraty# of (actually the first line of) that file that we are 443cbdda60SSimon J. Gerraty# interested in. 453cbdda60SSimon J. Gerraty# 463cbdda60SSimon J. Gerraty# Any "path" which lies outside of the sandbox "SB" is generally 473cbdda60SSimon J. Gerraty# not of interest and is ignored. 483cbdda60SSimon J. Gerraty# 493cbdda60SSimon J. Gerraty# The output, is a set of absolute paths with "SB" like: 503cbdda60SSimon J. Gerraty#.nf 513cbdda60SSimon J. Gerraty# 523cbdda60SSimon J. Gerraty# $SB/obj-i386/bsd/include 534ed220cdSEd Maste# $SB/obj-i386/bsd/lib/csu/i386 543cbdda60SSimon J. Gerraty# $SB/obj-i386/bsd/lib/libc 553cbdda60SSimon J. Gerraty# $SB/src/bsd/include 563cbdda60SSimon J. Gerraty# $SB/src/bsd/sys/i386/include 573cbdda60SSimon J. Gerraty# $SB/src/bsd/sys/sys 583cbdda60SSimon J. Gerraty# $SB/src/pan-release/rtsock 593cbdda60SSimon J. Gerraty# $SB/src/pfe-shared/include/jnx 603cbdda60SSimon J. Gerraty#.fi 613cbdda60SSimon J. Gerraty# 623cbdda60SSimon J. Gerraty# Which can then be further processed by 'gendirdeps.mk' 633cbdda60SSimon J. Gerraty# 643cbdda60SSimon J. Gerraty# If we are passed 'DPDEPS='"dpdeps", then for each src file 653cbdda60SSimon J. Gerraty# outside of "CURDIR" we read, we output a line like: 663cbdda60SSimon J. Gerraty#.nf 673cbdda60SSimon J. Gerraty# 683cbdda60SSimon J. Gerraty# DPDEPS_$path += $RELDIR 693cbdda60SSimon J. Gerraty#.fi 703cbdda60SSimon J. Gerraty# 713cbdda60SSimon J. Gerraty# with "$path" geting turned into reldir's, so that we can end 723cbdda60SSimon J. Gerraty# up with a list of all the directories which depend on each src 733cbdda60SSimon J. Gerraty# file in another directory. This can allow for efficient yet 743cbdda60SSimon J. Gerraty# complete testing of changes. 753cbdda60SSimon J. Gerraty 763cbdda60SSimon J. Gerraty 773cbdda60SSimon J. Gerraty# RCSid: 78c59c3bf3SSimon J. Gerraty# $Id: meta2deps.sh,v 1.21 2024/02/17 17:26:57 sjg Exp $ 793cbdda60SSimon J. Gerraty 80c59c3bf3SSimon J. Gerraty# SPDX-License-Identifier: BSD-2-Clause 81c59c3bf3SSimon J. Gerraty# 8252d86256SSimon J. Gerraty# Copyright (c) 2010-2013, Juniper Networks, Inc. 831748de26SSimon J. Gerraty# All rights reserved. 843cbdda60SSimon J. Gerraty# 853cbdda60SSimon J. Gerraty# Redistribution and use in source and binary forms, with or without 863cbdda60SSimon J. Gerraty# modification, are permitted provided that the following conditions 873cbdda60SSimon J. Gerraty# are met: 883cbdda60SSimon J. Gerraty# 1. Redistributions of source code must retain the above copyright 893cbdda60SSimon J. Gerraty# notice, this list of conditions and the following disclaimer. 903cbdda60SSimon J. Gerraty# 2. Redistributions in binary form must reproduce the above copyright 913cbdda60SSimon J. Gerraty# notice, this list of conditions and the following disclaimer in the 923cbdda60SSimon J. Gerraty# documentation and/or other materials provided with the distribution. 933cbdda60SSimon J. Gerraty# 943cbdda60SSimon J. Gerraty# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 953cbdda60SSimon J. Gerraty# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 963cbdda60SSimon J. Gerraty# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 973cbdda60SSimon J. Gerraty# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 983cbdda60SSimon J. Gerraty# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 993cbdda60SSimon J. Gerraty# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 1003cbdda60SSimon J. Gerraty# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1013cbdda60SSimon J. Gerraty# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 1023cbdda60SSimon J. Gerraty# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1033cbdda60SSimon J. Gerraty# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1043cbdda60SSimon J. Gerraty# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1053cbdda60SSimon J. Gerraty 1063cbdda60SSimon J. Gerratymeta2src() { 1073cbdda60SSimon J. Gerraty cat /dev/null "$@" | 1083cbdda60SSimon J. Gerraty sed -n '/^R .*\.[chyl]$/s,^..[0-9]* ,,p' | 1093cbdda60SSimon J. Gerraty sort -u 1103cbdda60SSimon J. Gerraty} 1113cbdda60SSimon J. Gerraty 1123cbdda60SSimon J. Gerratymeta2dirs() { 1133cbdda60SSimon J. Gerraty cat /dev/null "$@" | 1143cbdda60SSimon J. Gerraty sed -n '/^R .*\/.*\.[a-z0-9][^\/]*$/s,^..[0-9]* \(.*\)/[^/]*$,\1,p' | 1153cbdda60SSimon J. Gerraty sort -u 1163cbdda60SSimon J. Gerraty} 1173cbdda60SSimon J. Gerraty 11852d86256SSimon J. Gerratyadd_list() { 11952d86256SSimon J. Gerraty sep=' ' 12052d86256SSimon J. Gerraty suffix= 12152d86256SSimon J. Gerraty while : 12252d86256SSimon J. Gerraty do 12352d86256SSimon J. Gerraty case "$1" in 12452d86256SSimon J. Gerraty "|") sep="$1"; shift;; 12552d86256SSimon J. Gerraty -s) suffix="$2"; shift 2;; 12652d86256SSimon J. Gerraty *) break;; 12752d86256SSimon J. Gerraty esac 12852d86256SSimon J. Gerraty done 12952d86256SSimon J. Gerraty name=$1 13052d86256SSimon J. Gerraty shift 13152d86256SSimon J. Gerraty eval list="\$$name" 13252d86256SSimon J. Gerraty for top in "$@" 13352d86256SSimon J. Gerraty do 13452d86256SSimon J. Gerraty case "$sep$list$sep" in 13552d86256SSimon J. Gerraty *"$sep$top$suffix$sep"*) continue;; 13652d86256SSimon J. Gerraty esac 13752d86256SSimon J. Gerraty list="${list:+$list$sep}$top$suffix" 13852d86256SSimon J. Gerraty done 13952d86256SSimon J. Gerraty eval "$name=\"$list\"" 14052d86256SSimon J. Gerraty} 14152d86256SSimon J. Gerraty 1424fde40d9SSimon J. Gerraty# some Linux systems have deprecated egrep in favor of grep -E 1434fde40d9SSimon J. Gerraty# but not everyone supports that 1444fde40d9SSimon J. Gerratycase "`echo bmake | egrep 'a|b' 2>&1`" in 1454fde40d9SSimon J. Gerratybmake) ;; 1464fde40d9SSimon J. Gerraty*) egrep() { grep -E "$@"; } 1474fde40d9SSimon J. Gerratyesac 1484fde40d9SSimon J. Gerraty 149db29cad8SSimon J. Gerraty_excludes_f() { 150db29cad8SSimon J. Gerraty egrep -v "$EXCLUDES" 151db29cad8SSimon J. Gerraty} 152db29cad8SSimon J. Gerraty 153956e45f6SSimon J. Gerratyerror() { 154956e45f6SSimon J. Gerraty echo "ERROR: $@" >&2 155956e45f6SSimon J. Gerraty exit 1 156956e45f6SSimon J. Gerraty} 157956e45f6SSimon J. Gerraty 1583cbdda60SSimon J. Gerratymeta2deps() { 1593cbdda60SSimon J. Gerraty DPDEPS= 16052d86256SSimon J. Gerraty SRCTOPS=$SRCTOP 16152d86256SSimon J. Gerraty OBJROOTS= 162db29cad8SSimon J. Gerraty EXCLUDES= 1633cbdda60SSimon J. Gerraty while : 1643cbdda60SSimon J. Gerraty do 1653cbdda60SSimon J. Gerraty case "$1" in 1663cbdda60SSimon J. Gerraty *=*) eval export "$1"; shift;; 16752d86256SSimon J. Gerraty -a) MACHINE_ARCH=$2; shift 2;; 16852d86256SSimon J. Gerraty -m) MACHINE=$2; shift 2;; 16952d86256SSimon J. Gerraty -C) CURDIR=$2; shift 2;; 17052d86256SSimon J. Gerraty -H) HOST_TARGET=$2; shift 2;; 17152d86256SSimon J. Gerraty -S) add_list SRCTOPS $2; shift 2;; 17252d86256SSimon J. Gerraty -O) add_list OBJROOTS $2; shift 2;; 173db29cad8SSimon J. Gerraty -X) add_list EXCLUDES '|' $2; shift 2;; 17452d86256SSimon J. Gerraty -R) RELDIR=$2; shift 2;; 17552d86256SSimon J. Gerraty -T) TARGET_SPEC=$2; shift 2;; 1763cbdda60SSimon J. Gerraty *) break;; 1773cbdda60SSimon J. Gerraty esac 1783cbdda60SSimon J. Gerraty done 1793cbdda60SSimon J. Gerraty 18052d86256SSimon J. Gerraty _th= _o= 18152d86256SSimon J. Gerraty case "$MACHINE" in 18252d86256SSimon J. Gerraty host) _ht=$HOST_TARGET;; 18352d86256SSimon J. Gerraty esac 18452d86256SSimon J. Gerraty 18552d86256SSimon J. Gerraty for o in $OBJROOTS 18652d86256SSimon J. Gerraty do 18752d86256SSimon J. Gerraty case "$MACHINE,/$o/" in 18852d86256SSimon J. Gerraty host,*$HOST_TARGET*) ;; 18952d86256SSimon J. Gerraty *$MACHINE*|*${TARGET_SPEC:-$MACHINE}*) ;; 19052d86256SSimon J. Gerraty *) add_list _o $o; continue;; 19152d86256SSimon J. Gerraty esac 19252d86256SSimon J. Gerraty for x in $_ht $TARGET_SPEC $MACHINE 19352d86256SSimon J. Gerraty do 19452d86256SSimon J. Gerraty case "$o" in 19552d86256SSimon J. Gerraty "") continue;; 19652d86256SSimon J. Gerraty */$x/) add_list _o ${o%$x/}; o=;; 19752d86256SSimon J. Gerraty */$x) add_list _o ${o%$x}; o=;; 19852d86256SSimon J. Gerraty *$x/) add_list _o ${o%$x/}; o=;; 19952d86256SSimon J. Gerraty *$x) add_list _o ${o%$x}; o=;; 20052d86256SSimon J. Gerraty esac 20152d86256SSimon J. Gerraty done 20252d86256SSimon J. Gerraty done 20352d86256SSimon J. Gerraty OBJROOTS="$_o" 20452d86256SSimon J. Gerraty 20552d86256SSimon J. Gerraty case "$OBJTOP" in 20652d86256SSimon J. Gerraty "") 20752d86256SSimon J. Gerraty for o in $OBJROOTS 20852d86256SSimon J. Gerraty do 20952d86256SSimon J. Gerraty OBJTOP=$o${TARGET_SPEC:-$MACHINE} 21052d86256SSimon J. Gerraty break 21152d86256SSimon J. Gerraty done 21252d86256SSimon J. Gerraty ;; 21352d86256SSimon J. Gerraty esac 21452d86256SSimon J. Gerraty src_re= 21552d86256SSimon J. Gerraty obj_re= 21652d86256SSimon J. Gerraty add_list '|' -s '/*' src_re $SRCTOPS 21752d86256SSimon J. Gerraty add_list '|' -s '*' obj_re $OBJROOTS 21852d86256SSimon J. Gerraty 2193cbdda60SSimon J. Gerraty [ -z "$RELDIR" ] && unset DPDEPS 2203cbdda60SSimon J. Gerraty tf=/tmp/m2d$$-$USER 2213cbdda60SSimon J. Gerraty rm -f $tf.* 2223cbdda60SSimon J. Gerraty trap 'rm -f $tf.*; trap 0' 0 2233cbdda60SSimon J. Gerraty 2243cbdda60SSimon J. Gerraty > $tf.dirdep 2253cbdda60SSimon J. Gerraty > $tf.qual 2263cbdda60SSimon J. Gerraty > $tf.srcdep 2273cbdda60SSimon J. Gerraty > $tf.srcrel 2283cbdda60SSimon J. Gerraty > $tf.dpdeps 2293cbdda60SSimon J. Gerraty 2303cbdda60SSimon J. Gerraty seenit= 2313cbdda60SSimon J. Gerraty seensrc= 2323cbdda60SSimon J. Gerraty lpid= 233db29cad8SSimon J. Gerraty case "$EXCLUDES" in 234db29cad8SSimon J. Gerraty "") _excludes=cat;; 235db29cad8SSimon J. Gerraty *) _excludes=_excludes_f;; 236db29cad8SSimon J. Gerraty esac 237db29cad8SSimon J. Gerraty # handle @list files 238db29cad8SSimon J. Gerraty case "$@" in 239db29cad8SSimon J. Gerraty *@[!.]*) 240db29cad8SSimon J. Gerraty for f in "$@" 241db29cad8SSimon J. Gerraty do 242db29cad8SSimon J. Gerraty case "$f" in 243db29cad8SSimon J. Gerraty *.meta) cat $f;; 244db29cad8SSimon J. Gerraty @*) xargs cat < ${f#@};; 245db29cad8SSimon J. Gerraty *) cat $f;; 246db29cad8SSimon J. Gerraty esac 247db29cad8SSimon J. Gerraty done 248db29cad8SSimon J. Gerraty ;; 249db29cad8SSimon J. Gerraty *) cat /dev/null "$@";; 250db29cad8SSimon J. Gerraty esac 2> /dev/null | 2514fde40d9SSimon J. Gerraty sed -e 's,^CWD,C C,;/^[#CREFLMVX] /!d' -e "s,',,g" | 2524fde40d9SSimon J. Gerraty $_excludes | ( version=no epids= xpids= eof_token=no 2533cbdda60SSimon J. Gerraty while read op pid path junk 2543cbdda60SSimon J. Gerraty do 2553cbdda60SSimon J. Gerraty : op=$op pid=$pid path=$path 2563cbdda60SSimon J. Gerraty # we track cwd and ldir (of interest) per pid 2573cbdda60SSimon J. Gerraty # CWD is bmake's cwd 2583cbdda60SSimon J. Gerraty case "$lpid,$pid" in 2593cbdda60SSimon J. Gerraty ,C) CWD=$path cwd=$path ldir=$path 2603cbdda60SSimon J. Gerraty if [ -z "$SB" ]; then 2613cbdda60SSimon J. Gerraty SB=`echo $CWD | sed 's,/obj.*,,'` 2623cbdda60SSimon J. Gerraty fi 2633cbdda60SSimon J. Gerraty SRCTOP=${SRCTOP:-$SB/src} 264956e45f6SSimon J. Gerraty case "$verion" in 265956e45f6SSimon J. Gerraty no) ;; # ignore 266956e45f6SSimon J. Gerraty 0) error "no filemon data";; 267956e45f6SSimon J. Gerraty *) ;; 268956e45f6SSimon J. Gerraty esac 269956e45f6SSimon J. Gerraty version=0 2704fde40d9SSimon J. Gerraty case "$eof_token" in 2714fde40d9SSimon J. Gerraty no) ;; # ignore 2724fde40d9SSimon J. Gerraty 0) error "truncated filemon data";; 2734fde40d9SSimon J. Gerraty esac 2744fde40d9SSimon J. Gerraty eof_token=0 2753cbdda60SSimon J. Gerraty continue 2763cbdda60SSimon J. Gerraty ;; 2773cbdda60SSimon J. Gerraty $pid,$pid) ;; 2784fde40d9SSimon J. Gerraty [1-9]*) 2793cbdda60SSimon J. Gerraty case "$lpid" in 2803cbdda60SSimon J. Gerraty "") ;; 28145447996SSimon J. Gerraty *) eval ldir_$lpid=$ldir;; 2823cbdda60SSimon J. Gerraty esac 2833cbdda60SSimon J. Gerraty eval ldir=\${ldir_$pid:-$CWD} cwd=\${cwd_$pid:-$CWD} 2843cbdda60SSimon J. Gerraty lpid=$pid 2853cbdda60SSimon J. Gerraty ;; 2863cbdda60SSimon J. Gerraty esac 2873cbdda60SSimon J. Gerraty 2889f45a3c8SSimon J. Gerraty : op=$op path=$path 2893cbdda60SSimon J. Gerraty case "$op,$path" in 2909f45a3c8SSimon J. Gerraty V,*) version=$pid; continue;; 29152d86256SSimon J. Gerraty W,*srcrel|*.dirdep) continue;; 2923cbdda60SSimon J. Gerraty C,*) 2933cbdda60SSimon J. Gerraty case "$path" in 2943cbdda60SSimon J. Gerraty /*) cwd=$path;; 2953cbdda60SSimon J. Gerraty *) cwd=`cd $cwd/$path 2> /dev/null && /bin/pwd`;; 2963cbdda60SSimon J. Gerraty esac 2973cbdda60SSimon J. Gerraty # watch out for temp dirs that no longer exist 2983cbdda60SSimon J. Gerraty test -d ${cwd:-/dev/null/no/such} || cwd=$CWD 29945447996SSimon J. Gerraty eval cwd_$pid=$cwd 3003cbdda60SSimon J. Gerraty continue 3013cbdda60SSimon J. Gerraty ;; 30245447996SSimon J. Gerraty F,*) # $path is new pid 30345447996SSimon J. Gerraty eval cwd_$path=$cwd ldir_$path=$ldir 3043cbdda60SSimon J. Gerraty continue 3053cbdda60SSimon J. Gerraty ;; 3064fde40d9SSimon J. Gerraty \#,bye) eof_token=1; continue;; 3074fde40d9SSimon J. Gerraty \#*) continue;; 3083cbdda60SSimon J. Gerraty *) dir=${path%/*} 3099f45a3c8SSimon J. Gerraty case "$op" in 3109f45a3c8SSimon J. Gerraty E) # setid apps get no tracing so we won't see eXit 3119f45a3c8SSimon J. Gerraty case `'ls' -l $path 2> /dev/null | sed 's, .*,,'` in 3129f45a3c8SSimon J. Gerraty *s*) ;; 3139f45a3c8SSimon J. Gerraty *) epids="$epids $pid";; 3149f45a3c8SSimon J. Gerraty esac 3159f45a3c8SSimon J. Gerraty ;; 3169f45a3c8SSimon J. Gerraty X) xpids="$xpids $pid"; continue;; 3179f45a3c8SSimon J. Gerraty esac 3183cbdda60SSimon J. Gerraty case "$path" in 31952d86256SSimon J. Gerraty $src_re|$obj_re) ;; 3203cbdda60SSimon J. Gerraty /*/stage/*) ;; 3213cbdda60SSimon J. Gerraty /*) continue;; 3223cbdda60SSimon J. Gerraty *) for path in $ldir/$path $cwd/$path 3233cbdda60SSimon J. Gerraty do 3243cbdda60SSimon J. Gerraty test -e $path && break 3253cbdda60SSimon J. Gerraty done 3263cbdda60SSimon J. Gerraty dir=${path%/*} 3273cbdda60SSimon J. Gerraty ;; 3283cbdda60SSimon J. Gerraty esac 3293cbdda60SSimon J. Gerraty ;; 3303cbdda60SSimon J. Gerraty esac 3313cbdda60SSimon J. Gerraty # avoid repeating ourselves... 3323cbdda60SSimon J. Gerraty case "$DPDEPS,$seensrc," in 3333cbdda60SSimon J. Gerraty ,*) 3343cbdda60SSimon J. Gerraty case ",$seenit," in 3353cbdda60SSimon J. Gerraty *,$dir,*) continue;; 3363cbdda60SSimon J. Gerraty esac 3373cbdda60SSimon J. Gerraty ;; 3383cbdda60SSimon J. Gerraty *,$path,*) continue;; 3393cbdda60SSimon J. Gerraty esac 3403cbdda60SSimon J. Gerraty # canonicalize if needed 3413cbdda60SSimon J. Gerraty case "/$dir/" in 3423cbdda60SSimon J. Gerraty */../*|*/./*) 3433cbdda60SSimon J. Gerraty rdir=$dir 3443cbdda60SSimon J. Gerraty dir=`cd $dir 2> /dev/null && /bin/pwd` 3453cbdda60SSimon J. Gerraty seen="$rdir,$dir" 3463cbdda60SSimon J. Gerraty ;; 3473cbdda60SSimon J. Gerraty *) seen=$dir;; 3483cbdda60SSimon J. Gerraty esac 3493cbdda60SSimon J. Gerraty case "$dir" in 350be19d90bSSimon J. Gerraty ${CURDIR:-.}|"") continue;; 35152d86256SSimon J. Gerraty $src_re) 3523cbdda60SSimon J. Gerraty # avoid repeating ourselves... 3533cbdda60SSimon J. Gerraty case "$DPDEPS,$seensrc," in 3543cbdda60SSimon J. Gerraty ,*) 3553cbdda60SSimon J. Gerraty case ",$seenit," in 3563cbdda60SSimon J. Gerraty *,$dir,*) continue;; 3573cbdda60SSimon J. Gerraty esac 3583cbdda60SSimon J. Gerraty ;; 3593cbdda60SSimon J. Gerraty esac 3603cbdda60SSimon J. Gerraty ;; 3613cbdda60SSimon J. Gerraty *) 3623cbdda60SSimon J. Gerraty case ",$seenit," in 3633cbdda60SSimon J. Gerraty *,$dir,*) continue;; 3643cbdda60SSimon J. Gerraty esac 3653cbdda60SSimon J. Gerraty ;; 3663cbdda60SSimon J. Gerraty esac 3673cbdda60SSimon J. Gerraty if [ -d $path ]; then 3683cbdda60SSimon J. Gerraty case "$path" in 3693cbdda60SSimon J. Gerraty */..) ldir=${dir%/*};; 3703cbdda60SSimon J. Gerraty *) ldir=$path;; 3713cbdda60SSimon J. Gerraty esac 3723cbdda60SSimon J. Gerraty continue 3733cbdda60SSimon J. Gerraty fi 3743cbdda60SSimon J. Gerraty [ -f $path ] || continue 3753cbdda60SSimon J. Gerraty case "$dir" in 3763cbdda60SSimon J. Gerraty $CWD) continue;; # ignore 37752d86256SSimon J. Gerraty $src_re) 3783cbdda60SSimon J. Gerraty seenit="$seenit,$seen" 3793cbdda60SSimon J. Gerraty echo $dir >> $tf.srcdep 3803cbdda60SSimon J. Gerraty case "$DPDEPS,$reldir,$seensrc," in 3813cbdda60SSimon J. Gerraty ,*) ;; 3823cbdda60SSimon J. Gerraty *) seensrc="$seensrc,$path" 3833cbdda60SSimon J. Gerraty echo "DPDEPS_$dir/${path##*/} += $RELDIR" >> $tf.dpdeps 3843cbdda60SSimon J. Gerraty ;; 3853cbdda60SSimon J. Gerraty esac 3863cbdda60SSimon J. Gerraty continue 3873cbdda60SSimon J. Gerraty ;; 3883cbdda60SSimon J. Gerraty esac 3893cbdda60SSimon J. Gerraty # if there is a .dirdep we cannot skip 3903cbdda60SSimon J. Gerraty # just because we've seen the dir before. 3913cbdda60SSimon J. Gerraty if [ -s $path.dirdep ]; then 3923cbdda60SSimon J. Gerraty # this file contains: 3933cbdda60SSimon J. Gerraty # '# ${RELDIR}.<machine>' 3943cbdda60SSimon J. Gerraty echo $path.dirdep >> $tf.qual 3953cbdda60SSimon J. Gerraty continue 3963cbdda60SSimon J. Gerraty elif [ -s $dir.dirdep ]; then 3973cbdda60SSimon J. Gerraty echo $dir.dirdep >> $tf.qual 3983cbdda60SSimon J. Gerraty seenit="$seenit,$seen" 3993cbdda60SSimon J. Gerraty continue 4003cbdda60SSimon J. Gerraty fi 4013cbdda60SSimon J. Gerraty seenit="$seenit,$seen" 4023cbdda60SSimon J. Gerraty case "$dir" in 40352d86256SSimon J. Gerraty $obj_re) 4043cbdda60SSimon J. Gerraty echo $dir;; 4053cbdda60SSimon J. Gerraty esac 4063cbdda60SSimon J. Gerraty done > $tf.dirdep 4079f45a3c8SSimon J. Gerraty : version=$version 408956e45f6SSimon J. Gerraty case "$version" in 409956e45f6SSimon J. Gerraty 0) error "no filemon data";; 4109f45a3c8SSimon J. Gerraty esac 4114fde40d9SSimon J. Gerraty : eof_token=$eof_token 4124fde40d9SSimon J. Gerraty case "$eof_token" in 4134fde40d9SSimon J. Gerraty 0) error "truncated filemon data";; 4144fde40d9SSimon J. Gerraty esac 4159f45a3c8SSimon J. Gerraty for p in $epids 4169f45a3c8SSimon J. Gerraty do 4179f45a3c8SSimon J. Gerraty : p=$p 4189f45a3c8SSimon J. Gerraty case " $xpids " in 4199f45a3c8SSimon J. Gerraty *" $p "*) ;; 4209f45a3c8SSimon J. Gerraty *) error "missing eXit for pid $p";; 4219f45a3c8SSimon J. Gerraty esac 4229f45a3c8SSimon J. Gerraty done ) || exit 1 4233cbdda60SSimon J. Gerraty _nl=echo 4243cbdda60SSimon J. Gerraty for f in $tf.dirdep $tf.qual $tf.srcdep 4253cbdda60SSimon J. Gerraty do 4263cbdda60SSimon J. Gerraty [ -s $f ] || continue 4273cbdda60SSimon J. Gerraty case $f in 4283cbdda60SSimon J. Gerraty *qual) # a list of .dirdep files 4295bcb7424SSimon J. Gerraty # we can prefix everything with $OBJTOP to 4303cbdda60SSimon J. Gerraty # tell gendirdeps.mk that these are 4313cbdda60SSimon J. Gerraty # DIRDEP entries, since they are already 4323cbdda60SSimon J. Gerraty # qualified with .<machine> as needed. 4333cbdda60SSimon J. Gerraty # We strip .$MACHINE though 4343cbdda60SSimon J. Gerraty xargs cat < $f | sort -u | 43552d86256SSimon J. Gerraty sed "s,^# ,,;s,^,$OBJTOP/,;s,\.${TARGET_SPEC:-$MACHINE}\$,,;s,\.$MACHINE\$,," 4363cbdda60SSimon J. Gerraty ;; 4373cbdda60SSimon J. Gerraty *) sort -u $f;; 4383cbdda60SSimon J. Gerraty esac 4393cbdda60SSimon J. Gerraty _nl=: 4403cbdda60SSimon J. Gerraty done 4413cbdda60SSimon J. Gerraty if [ -s $tf.dpdeps ]; then 4423cbdda60SSimon J. Gerraty case "$DPDEPS" in 4433cbdda60SSimon J. Gerraty */*) ;; 4443cbdda60SSimon J. Gerraty *) echo > $DPDEPS;; # the echo is needed! 4453cbdda60SSimon J. Gerraty esac 4463cbdda60SSimon J. Gerraty sort -u $tf.dpdeps | 4473cbdda60SSimon J. Gerraty sed "s,${SRCTOP}/,,;s,${SB_BACKING_SB:-$SB}/src/,," >> $DPDEPS 4483cbdda60SSimon J. Gerraty fi 4493cbdda60SSimon J. Gerraty # ensure we produce _something_ else egrep -v gets upset 4503cbdda60SSimon J. Gerraty $_nl 4513cbdda60SSimon J. Gerraty} 4523cbdda60SSimon J. Gerraty 4533cbdda60SSimon J. Gerratycase /$0 in 4543cbdda60SSimon J. Gerraty*/meta2dep*) meta2deps "$@";; 4553cbdda60SSimon J. Gerraty*/meta2dirs*) meta2dirs "$@";; 4563cbdda60SSimon J. Gerraty*/meta2src*) meta2src "$@";; 4573cbdda60SSimon J. Gerratyesac 458