17750ad47SMarcel Moolenaar#!/bin/sh 27750ad47SMarcel Moolenaar 37750ad47SMarcel Moolenaar# NAME: 47750ad47SMarcel Moolenaar# meta2deps.sh - extract useful info from .meta files 57750ad47SMarcel Moolenaar# 67750ad47SMarcel Moolenaar# SYNOPSIS: 77750ad47SMarcel Moolenaar# meta2deps.sh SB="SB" "meta" ... 87750ad47SMarcel Moolenaar# 97750ad47SMarcel Moolenaar# DESCRIPTION: 107750ad47SMarcel Moolenaar# This script looks each "meta" file and extracts the 117750ad47SMarcel Moolenaar# information needed to deduce build and src dependencies. 127750ad47SMarcel Moolenaar# 137750ad47SMarcel Moolenaar# To do this, we extract the 'CWD' record as well as all the 147750ad47SMarcel Moolenaar# syscall traces which describe 'R'ead, 'C'hdir and 'E'xec 157750ad47SMarcel Moolenaar# syscalls. 167750ad47SMarcel Moolenaar# 177750ad47SMarcel Moolenaar# The typical meta file looks like:: 187750ad47SMarcel Moolenaar#.nf 197750ad47SMarcel Moolenaar# 207750ad47SMarcel Moolenaar# # Meta data file "path" 217750ad47SMarcel Moolenaar# CMD "command-line" 227750ad47SMarcel Moolenaar# CWD "cwd" 237750ad47SMarcel Moolenaar# TARGET "target" 247750ad47SMarcel Moolenaar# -- command output -- 257750ad47SMarcel Moolenaar# -- filemon acquired metadata -- 267750ad47SMarcel Moolenaar# # buildmon version 2 277750ad47SMarcel Moolenaar# V 2 287750ad47SMarcel Moolenaar# E "pid" "path" 297750ad47SMarcel Moolenaar# R "pid" "path" 307750ad47SMarcel Moolenaar# C "pid" "cwd" 317750ad47SMarcel Moolenaar# R "pid" "path" 327750ad47SMarcel Moolenaar# X "pid" "status" 337750ad47SMarcel Moolenaar#.fi 347750ad47SMarcel Moolenaar# 357750ad47SMarcel Moolenaar# The fact that all the syscall entry lines start with a single 367750ad47SMarcel Moolenaar# character make these files quite easy to process using sed(1). 377750ad47SMarcel Moolenaar# 387750ad47SMarcel Moolenaar# To simplify the logic the 'CWD' line is made to look like a 397750ad47SMarcel Moolenaar# normal 'C'hdir entry, and "cwd" is remembered so that it can 407750ad47SMarcel Moolenaar# be prefixed to any "path" which is not absolute. 417750ad47SMarcel Moolenaar# 427750ad47SMarcel Moolenaar# If the "path" being read ends in '.srcrel' it is the content 437750ad47SMarcel Moolenaar# of (actually the first line of) that file that we are 447750ad47SMarcel Moolenaar# interested in. 457750ad47SMarcel Moolenaar# 467750ad47SMarcel Moolenaar# Any "path" which lies outside of the sandbox "SB" is generally 477750ad47SMarcel Moolenaar# not of interest and is ignored. 487750ad47SMarcel Moolenaar# 497750ad47SMarcel Moolenaar# The output, is a set of absolute paths with "SB" like: 507750ad47SMarcel Moolenaar#.nf 517750ad47SMarcel Moolenaar# 527750ad47SMarcel Moolenaar# $SB/obj-i386/bsd/include 53f974ced3SSimon J. Gerraty# $SB/obj-i386/bsd/lib/csu/i386 547750ad47SMarcel Moolenaar# $SB/obj-i386/bsd/lib/libc 557750ad47SMarcel Moolenaar# $SB/src/bsd/include 567750ad47SMarcel Moolenaar# $SB/src/bsd/sys/i386/include 577750ad47SMarcel Moolenaar# $SB/src/bsd/sys/sys 587750ad47SMarcel Moolenaar# $SB/src/pan-release/rtsock 597750ad47SMarcel Moolenaar# $SB/src/pfe-shared/include/jnx 607750ad47SMarcel Moolenaar#.fi 617750ad47SMarcel Moolenaar# 627750ad47SMarcel Moolenaar# Which can then be further processed by 'gendirdeps.mk' 637750ad47SMarcel Moolenaar# 647750ad47SMarcel Moolenaar# If we are passed 'DPDEPS='"dpdeps", then for each src file 657750ad47SMarcel Moolenaar# outside of "CURDIR" we read, we output a line like: 667750ad47SMarcel Moolenaar#.nf 677750ad47SMarcel Moolenaar# 687750ad47SMarcel Moolenaar# DPDEPS_$path += $RELDIR 697750ad47SMarcel Moolenaar#.fi 707750ad47SMarcel Moolenaar# 717750ad47SMarcel Moolenaar# with "$path" geting turned into reldir's, so that we can end 727750ad47SMarcel Moolenaar# up with a list of all the directories which depend on each src 737750ad47SMarcel Moolenaar# file in another directory. This can allow for efficient yet 747750ad47SMarcel Moolenaar# complete testing of changes. 757750ad47SMarcel Moolenaar 767750ad47SMarcel Moolenaar 777750ad47SMarcel Moolenaar# RCSid: 78f974ced3SSimon J. Gerraty# $Id: meta2deps.sh,v 1.21 2024/02/17 17:26:57 sjg Exp $ 797750ad47SMarcel Moolenaar 80f974ced3SSimon J. Gerraty# SPDX-License-Identifier: BSD-2-Clause 81f974ced3SSimon J. Gerraty# 82ccfb9654SSimon J. Gerraty# Copyright (c) 2010-2013, Juniper Networks, Inc. 83ccfb9654SSimon J. Gerraty# All rights reserved. 847750ad47SMarcel Moolenaar# 857750ad47SMarcel Moolenaar# Redistribution and use in source and binary forms, with or without 867750ad47SMarcel Moolenaar# modification, are permitted provided that the following conditions 877750ad47SMarcel Moolenaar# are met: 887750ad47SMarcel Moolenaar# 1. Redistributions of source code must retain the above copyright 897750ad47SMarcel Moolenaar# notice, this list of conditions and the following disclaimer. 907750ad47SMarcel Moolenaar# 2. Redistributions in binary form must reproduce the above copyright 917750ad47SMarcel Moolenaar# notice, this list of conditions and the following disclaimer in the 927750ad47SMarcel Moolenaar# documentation and/or other materials provided with the distribution. 937750ad47SMarcel Moolenaar# 947750ad47SMarcel Moolenaar# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 957750ad47SMarcel Moolenaar# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 967750ad47SMarcel Moolenaar# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 977750ad47SMarcel Moolenaar# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 987750ad47SMarcel Moolenaar# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 997750ad47SMarcel Moolenaar# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 1007750ad47SMarcel Moolenaar# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1017750ad47SMarcel Moolenaar# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 1027750ad47SMarcel Moolenaar# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1037750ad47SMarcel Moolenaar# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1047750ad47SMarcel Moolenaar# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1057750ad47SMarcel Moolenaar 1067750ad47SMarcel Moolenaarmeta2src() { 1077750ad47SMarcel Moolenaar cat /dev/null "$@" | 1087750ad47SMarcel Moolenaar sed -n '/^R .*\.[chyl]$/s,^..[0-9]* ,,p' | 1097750ad47SMarcel Moolenaar sort -u 1107750ad47SMarcel Moolenaar} 1117750ad47SMarcel Moolenaar 1127750ad47SMarcel Moolenaarmeta2dirs() { 1137750ad47SMarcel Moolenaar cat /dev/null "$@" | 1147750ad47SMarcel Moolenaar sed -n '/^R .*\/.*\.[a-z0-9][^\/]*$/s,^..[0-9]* \(.*\)/[^/]*$,\1,p' | 1157750ad47SMarcel Moolenaar sort -u 1167750ad47SMarcel Moolenaar} 1177750ad47SMarcel Moolenaar 11806137b0fSSimon J. Gerratyadd_list() { 11906137b0fSSimon J. Gerraty sep=' ' 12006137b0fSSimon J. Gerraty suffix= 12106137b0fSSimon J. Gerraty while : 12206137b0fSSimon J. Gerraty do 12306137b0fSSimon J. Gerraty case "$1" in 12406137b0fSSimon J. Gerraty "|") sep="$1"; shift;; 12506137b0fSSimon J. Gerraty -s) suffix="$2"; shift 2;; 12606137b0fSSimon J. Gerraty *) break;; 12706137b0fSSimon J. Gerraty esac 12806137b0fSSimon J. Gerraty done 12906137b0fSSimon J. Gerraty name=$1 13006137b0fSSimon J. Gerraty shift 13106137b0fSSimon J. Gerraty eval list="\$$name" 13206137b0fSSimon J. Gerraty for top in "$@" 13306137b0fSSimon J. Gerraty do 13406137b0fSSimon J. Gerraty case "$sep$list$sep" in 13506137b0fSSimon J. Gerraty *"$sep$top$suffix$sep"*) continue;; 13606137b0fSSimon J. Gerraty esac 13706137b0fSSimon J. Gerraty list="${list:+$list$sep}$top$suffix" 13806137b0fSSimon J. Gerraty done 13906137b0fSSimon J. Gerraty eval "$name=\"$list\"" 14006137b0fSSimon J. Gerraty} 14106137b0fSSimon J. Gerraty 142bf7aa99aSSimon J. Gerraty# some Linux systems have deprecated egrep in favor of grep -E 143bf7aa99aSSimon J. Gerraty# but not everyone supports that 144bf7aa99aSSimon J. Gerratycase "`echo bmake | egrep 'a|b' 2>&1`" in 145bf7aa99aSSimon J. Gerratybmake) ;; 146bf7aa99aSSimon J. Gerraty*) egrep() { grep -E "$@"; } 147bf7aa99aSSimon J. Gerratyesac 148bf7aa99aSSimon J. Gerraty 149ccfb9654SSimon J. Gerraty_excludes_f() { 150ccfb9654SSimon J. Gerraty egrep -v "$EXCLUDES" 151ccfb9654SSimon J. Gerraty} 152ccfb9654SSimon J. Gerraty 153960b77beSSimon J. Gerratyerror() { 154960b77beSSimon J. Gerraty echo "ERROR: $@" >&2 155960b77beSSimon J. Gerraty exit 1 156960b77beSSimon J. Gerraty} 157960b77beSSimon J. Gerraty 1587750ad47SMarcel Moolenaarmeta2deps() { 1597750ad47SMarcel Moolenaar DPDEPS= 16006137b0fSSimon J. Gerraty SRCTOPS=$SRCTOP 16106137b0fSSimon J. Gerraty OBJROOTS= 162ccfb9654SSimon J. Gerraty EXCLUDES= 1637750ad47SMarcel Moolenaar while : 1647750ad47SMarcel Moolenaar do 1657750ad47SMarcel Moolenaar case "$1" in 1667750ad47SMarcel Moolenaar *=*) eval export "$1"; shift;; 16706137b0fSSimon J. Gerraty -a) MACHINE_ARCH=$2; shift 2;; 16806137b0fSSimon J. Gerraty -m) MACHINE=$2; shift 2;; 16906137b0fSSimon J. Gerraty -C) CURDIR=$2; shift 2;; 17006137b0fSSimon J. Gerraty -H) HOST_TARGET=$2; shift 2;; 17106137b0fSSimon J. Gerraty -S) add_list SRCTOPS $2; shift 2;; 17206137b0fSSimon J. Gerraty -O) add_list OBJROOTS $2; shift 2;; 173ccfb9654SSimon J. Gerraty -X) add_list EXCLUDES '|' $2; shift 2;; 17406137b0fSSimon J. Gerraty -R) RELDIR=$2; shift 2;; 17506137b0fSSimon J. Gerraty -T) TARGET_SPEC=$2; shift 2;; 1767750ad47SMarcel Moolenaar *) break;; 1777750ad47SMarcel Moolenaar esac 1787750ad47SMarcel Moolenaar done 1797750ad47SMarcel Moolenaar 18006137b0fSSimon J. Gerraty _th= _o= 18106137b0fSSimon J. Gerraty case "$MACHINE" in 18206137b0fSSimon J. Gerraty host) _ht=$HOST_TARGET;; 18306137b0fSSimon J. Gerraty esac 18406137b0fSSimon J. Gerraty 18506137b0fSSimon J. Gerraty for o in $OBJROOTS 18606137b0fSSimon J. Gerraty do 18706137b0fSSimon J. Gerraty case "$MACHINE,/$o/" in 18806137b0fSSimon J. Gerraty host,*$HOST_TARGET*) ;; 18906137b0fSSimon J. Gerraty *$MACHINE*|*${TARGET_SPEC:-$MACHINE}*) ;; 19006137b0fSSimon J. Gerraty *) add_list _o $o; continue;; 19106137b0fSSimon J. Gerraty esac 19206137b0fSSimon J. Gerraty for x in $_ht $TARGET_SPEC $MACHINE 19306137b0fSSimon J. Gerraty do 19406137b0fSSimon J. Gerraty case "$o" in 19506137b0fSSimon J. Gerraty "") continue;; 19606137b0fSSimon J. Gerraty */$x/) add_list _o ${o%$x/}; o=;; 19706137b0fSSimon J. Gerraty */$x) add_list _o ${o%$x}; o=;; 19806137b0fSSimon J. Gerraty *$x/) add_list _o ${o%$x/}; o=;; 19906137b0fSSimon J. Gerraty *$x) add_list _o ${o%$x}; o=;; 20006137b0fSSimon J. Gerraty esac 20106137b0fSSimon J. Gerraty done 20206137b0fSSimon J. Gerraty done 20306137b0fSSimon J. Gerraty OBJROOTS="$_o" 20406137b0fSSimon J. Gerraty 20506137b0fSSimon J. Gerraty case "$OBJTOP" in 20606137b0fSSimon J. Gerraty "") 20706137b0fSSimon J. Gerraty for o in $OBJROOTS 20806137b0fSSimon J. Gerraty do 20906137b0fSSimon J. Gerraty OBJTOP=$o${TARGET_SPEC:-$MACHINE} 21006137b0fSSimon J. Gerraty break 21106137b0fSSimon J. Gerraty done 21206137b0fSSimon J. Gerraty ;; 21306137b0fSSimon J. Gerraty esac 21406137b0fSSimon J. Gerraty src_re= 21506137b0fSSimon J. Gerraty obj_re= 21606137b0fSSimon J. Gerraty add_list '|' -s '/*' src_re $SRCTOPS 21706137b0fSSimon J. Gerraty add_list '|' -s '*' obj_re $OBJROOTS 21806137b0fSSimon J. Gerraty 2197750ad47SMarcel Moolenaar [ -z "$RELDIR" ] && unset DPDEPS 2207750ad47SMarcel Moolenaar tf=/tmp/m2d$$-$USER 2217750ad47SMarcel Moolenaar rm -f $tf.* 2227750ad47SMarcel Moolenaar trap 'rm -f $tf.*; trap 0' 0 2237750ad47SMarcel Moolenaar 2247750ad47SMarcel Moolenaar > $tf.dirdep 2257750ad47SMarcel Moolenaar > $tf.qual 2267750ad47SMarcel Moolenaar > $tf.srcdep 2277750ad47SMarcel Moolenaar > $tf.srcrel 2287750ad47SMarcel Moolenaar > $tf.dpdeps 2297750ad47SMarcel Moolenaar 2307750ad47SMarcel Moolenaar seenit= 2317750ad47SMarcel Moolenaar seensrc= 2327750ad47SMarcel Moolenaar lpid= 233ccfb9654SSimon J. Gerraty case "$EXCLUDES" in 234ccfb9654SSimon J. Gerraty "") _excludes=cat;; 235ccfb9654SSimon J. Gerraty *) _excludes=_excludes_f;; 236ccfb9654SSimon J. Gerraty esac 237ccfb9654SSimon J. Gerraty # handle @list files 238ccfb9654SSimon J. Gerraty case "$@" in 239ccfb9654SSimon J. Gerraty *@[!.]*) 240ccfb9654SSimon J. Gerraty for f in "$@" 241ccfb9654SSimon J. Gerraty do 242ccfb9654SSimon J. Gerraty case "$f" in 243ccfb9654SSimon J. Gerraty *.meta) cat $f;; 244ccfb9654SSimon J. Gerraty @*) xargs cat < ${f#@};; 245ccfb9654SSimon J. Gerraty *) cat $f;; 246ccfb9654SSimon J. Gerraty esac 247ccfb9654SSimon J. Gerraty done 248ccfb9654SSimon J. Gerraty ;; 249ccfb9654SSimon J. Gerraty *) cat /dev/null "$@";; 250ccfb9654SSimon J. Gerraty esac 2> /dev/null | 251bf7aa99aSSimon J. Gerraty sed -e 's,^CWD,C C,;/^[#CREFLMVX] /!d' -e "s,',,g" | 252bf7aa99aSSimon J. Gerraty $_excludes | ( version=no epids= xpids= eof_token=no 2537750ad47SMarcel Moolenaar while read op pid path junk 2547750ad47SMarcel Moolenaar do 2557750ad47SMarcel Moolenaar : op=$op pid=$pid path=$path 2567750ad47SMarcel Moolenaar # we track cwd and ldir (of interest) per pid 2577750ad47SMarcel Moolenaar # CWD is bmake's cwd 2587750ad47SMarcel Moolenaar case "$lpid,$pid" in 2597750ad47SMarcel Moolenaar ,C) CWD=$path cwd=$path ldir=$path 2607750ad47SMarcel Moolenaar if [ -z "$SB" ]; then 2617750ad47SMarcel Moolenaar SB=`echo $CWD | sed 's,/obj.*,,'` 2627750ad47SMarcel Moolenaar fi 2637750ad47SMarcel Moolenaar SRCTOP=${SRCTOP:-$SB/src} 264960b77beSSimon J. Gerraty case "$verion" in 265960b77beSSimon J. Gerraty no) ;; # ignore 266960b77beSSimon J. Gerraty 0) error "no filemon data";; 267960b77beSSimon J. Gerraty *) ;; 268960b77beSSimon J. Gerraty esac 269960b77beSSimon J. Gerraty version=0 270bf7aa99aSSimon J. Gerraty case "$eof_token" in 271bf7aa99aSSimon J. Gerraty no) ;; # ignore 272bf7aa99aSSimon J. Gerraty 0) error "truncated filemon data";; 273bf7aa99aSSimon J. Gerraty esac 274bf7aa99aSSimon J. Gerraty eof_token=0 2757750ad47SMarcel Moolenaar continue 2767750ad47SMarcel Moolenaar ;; 2777750ad47SMarcel Moolenaar $pid,$pid) ;; 278bf7aa99aSSimon J. Gerraty [1-9]*) 2797750ad47SMarcel Moolenaar case "$lpid" in 2807750ad47SMarcel Moolenaar "") ;; 281b47b9f6bSSimon J. Gerraty *) eval ldir_$lpid=$ldir;; 2827750ad47SMarcel Moolenaar esac 2837750ad47SMarcel Moolenaar eval ldir=\${ldir_$pid:-$CWD} cwd=\${cwd_$pid:-$CWD} 2847750ad47SMarcel Moolenaar lpid=$pid 2857750ad47SMarcel Moolenaar ;; 2867750ad47SMarcel Moolenaar esac 2877750ad47SMarcel Moolenaar 288bf7aa99aSSimon J. Gerraty : op=$op path=$path 2897750ad47SMarcel Moolenaar case "$op,$path" in 290bf7aa99aSSimon J. Gerraty V,*) version=$pid; continue;; 29106137b0fSSimon J. Gerraty W,*srcrel|*.dirdep) continue;; 2927750ad47SMarcel Moolenaar C,*) 2937750ad47SMarcel Moolenaar case "$path" in 2947750ad47SMarcel Moolenaar /*) cwd=$path;; 2957750ad47SMarcel Moolenaar *) cwd=`cd $cwd/$path 2> /dev/null && /bin/pwd`;; 2967750ad47SMarcel Moolenaar esac 2977750ad47SMarcel Moolenaar # watch out for temp dirs that no longer exist 2987750ad47SMarcel Moolenaar test -d ${cwd:-/dev/null/no/such} || cwd=$CWD 299b47b9f6bSSimon J. Gerraty eval cwd_$pid=$cwd 3007750ad47SMarcel Moolenaar continue 3017750ad47SMarcel Moolenaar ;; 302b47b9f6bSSimon J. Gerraty F,*) # $path is new pid 303b47b9f6bSSimon J. Gerraty eval cwd_$path=$cwd ldir_$path=$ldir 3047750ad47SMarcel Moolenaar continue 3057750ad47SMarcel Moolenaar ;; 306bf7aa99aSSimon J. Gerraty \#,bye) eof_token=1; continue;; 307bf7aa99aSSimon J. Gerraty \#*) continue;; 3087750ad47SMarcel Moolenaar *) dir=${path%/*} 309bf7aa99aSSimon J. Gerraty case "$op" in 310bf7aa99aSSimon J. Gerraty E) # setid apps get no tracing so we won't see eXit 311bf7aa99aSSimon J. Gerraty case `'ls' -l $path 2> /dev/null | sed 's, .*,,'` in 312bf7aa99aSSimon J. Gerraty *s*) ;; 313bf7aa99aSSimon J. Gerraty *) epids="$epids $pid";; 314bf7aa99aSSimon J. Gerraty esac 315bf7aa99aSSimon J. Gerraty ;; 316bf7aa99aSSimon J. Gerraty X) xpids="$xpids $pid"; continue;; 317bf7aa99aSSimon J. Gerraty esac 3187750ad47SMarcel Moolenaar case "$path" in 31906137b0fSSimon J. Gerraty $src_re|$obj_re) ;; 3207750ad47SMarcel Moolenaar /*/stage/*) ;; 3217750ad47SMarcel Moolenaar /*) continue;; 3227750ad47SMarcel Moolenaar *) for path in $ldir/$path $cwd/$path 3237750ad47SMarcel Moolenaar do 3247750ad47SMarcel Moolenaar test -e $path && break 3257750ad47SMarcel Moolenaar done 3267750ad47SMarcel Moolenaar dir=${path%/*} 3277750ad47SMarcel Moolenaar ;; 3287750ad47SMarcel Moolenaar esac 3297750ad47SMarcel Moolenaar ;; 3307750ad47SMarcel Moolenaar esac 3317750ad47SMarcel Moolenaar # avoid repeating ourselves... 3327750ad47SMarcel Moolenaar case "$DPDEPS,$seensrc," in 3337750ad47SMarcel Moolenaar ,*) 3347750ad47SMarcel Moolenaar case ",$seenit," in 3357750ad47SMarcel Moolenaar *,$dir,*) continue;; 3367750ad47SMarcel Moolenaar esac 3377750ad47SMarcel Moolenaar ;; 3387750ad47SMarcel Moolenaar *,$path,*) continue;; 3397750ad47SMarcel Moolenaar esac 3407750ad47SMarcel Moolenaar # canonicalize if needed 3417750ad47SMarcel Moolenaar case "/$dir/" in 3427750ad47SMarcel Moolenaar */../*|*/./*) 3437750ad47SMarcel Moolenaar rdir=$dir 3447750ad47SMarcel Moolenaar dir=`cd $dir 2> /dev/null && /bin/pwd` 3457750ad47SMarcel Moolenaar seen="$rdir,$dir" 3467750ad47SMarcel Moolenaar ;; 3477750ad47SMarcel Moolenaar *) seen=$dir;; 3487750ad47SMarcel Moolenaar esac 3497750ad47SMarcel Moolenaar case "$dir" in 350210ee5ceSBryan Drewery ${CURDIR:-.}|"") continue;; 35106137b0fSSimon J. Gerraty $src_re) 3527750ad47SMarcel Moolenaar # avoid repeating ourselves... 3537750ad47SMarcel Moolenaar case "$DPDEPS,$seensrc," in 3547750ad47SMarcel Moolenaar ,*) 3557750ad47SMarcel Moolenaar case ",$seenit," in 3567750ad47SMarcel Moolenaar *,$dir,*) continue;; 3577750ad47SMarcel Moolenaar esac 3587750ad47SMarcel Moolenaar ;; 3597750ad47SMarcel Moolenaar esac 3607750ad47SMarcel Moolenaar ;; 3617750ad47SMarcel Moolenaar *) 3627750ad47SMarcel Moolenaar case ",$seenit," in 3637750ad47SMarcel Moolenaar *,$dir,*) continue;; 3647750ad47SMarcel Moolenaar esac 3657750ad47SMarcel Moolenaar ;; 3667750ad47SMarcel Moolenaar esac 3677750ad47SMarcel Moolenaar if [ -d $path ]; then 3687750ad47SMarcel Moolenaar case "$path" in 3697750ad47SMarcel Moolenaar */..) ldir=${dir%/*};; 3707750ad47SMarcel Moolenaar *) ldir=$path;; 3717750ad47SMarcel Moolenaar esac 3727750ad47SMarcel Moolenaar continue 3737750ad47SMarcel Moolenaar fi 3747750ad47SMarcel Moolenaar [ -f $path ] || continue 3757750ad47SMarcel Moolenaar case "$dir" in 3767750ad47SMarcel Moolenaar $CWD) continue;; # ignore 37706137b0fSSimon J. Gerraty $src_re) 3787750ad47SMarcel Moolenaar seenit="$seenit,$seen" 3797750ad47SMarcel Moolenaar echo $dir >> $tf.srcdep 3807750ad47SMarcel Moolenaar case "$DPDEPS,$reldir,$seensrc," in 3817750ad47SMarcel Moolenaar ,*) ;; 3827750ad47SMarcel Moolenaar *) seensrc="$seensrc,$path" 3837750ad47SMarcel Moolenaar echo "DPDEPS_$dir/${path##*/} += $RELDIR" >> $tf.dpdeps 3847750ad47SMarcel Moolenaar ;; 3857750ad47SMarcel Moolenaar esac 3867750ad47SMarcel Moolenaar continue 3877750ad47SMarcel Moolenaar ;; 3887750ad47SMarcel Moolenaar esac 3897750ad47SMarcel Moolenaar # if there is a .dirdep we cannot skip 3907750ad47SMarcel Moolenaar # just because we've seen the dir before. 3917750ad47SMarcel Moolenaar if [ -s $path.dirdep ]; then 3927750ad47SMarcel Moolenaar # this file contains: 3937750ad47SMarcel Moolenaar # '# ${RELDIR}.<machine>' 3947750ad47SMarcel Moolenaar echo $path.dirdep >> $tf.qual 3957750ad47SMarcel Moolenaar continue 3967750ad47SMarcel Moolenaar elif [ -s $dir.dirdep ]; then 3977750ad47SMarcel Moolenaar echo $dir.dirdep >> $tf.qual 3987750ad47SMarcel Moolenaar seenit="$seenit,$seen" 3997750ad47SMarcel Moolenaar continue 4007750ad47SMarcel Moolenaar fi 4017750ad47SMarcel Moolenaar seenit="$seenit,$seen" 4027750ad47SMarcel Moolenaar case "$dir" in 40306137b0fSSimon J. Gerraty $obj_re) 4047750ad47SMarcel Moolenaar echo $dir;; 4057750ad47SMarcel Moolenaar esac 4067750ad47SMarcel Moolenaar done > $tf.dirdep 407bf7aa99aSSimon J. Gerraty : version=$version 408960b77beSSimon J. Gerraty case "$version" in 409960b77beSSimon J. Gerraty 0) error "no filemon data";; 410bf7aa99aSSimon J. Gerraty esac 411bf7aa99aSSimon J. Gerraty : eof_token=$eof_token 412bf7aa99aSSimon J. Gerraty case "$eof_token" in 413bf7aa99aSSimon J. Gerraty 0) error "truncated filemon data";; 414bf7aa99aSSimon J. Gerraty esac 415bf7aa99aSSimon J. Gerraty for p in $epids 416bf7aa99aSSimon J. Gerraty do 417bf7aa99aSSimon J. Gerraty : p=$p 418bf7aa99aSSimon J. Gerraty case " $xpids " in 419bf7aa99aSSimon J. Gerraty *" $p "*) ;; 420bf7aa99aSSimon J. Gerraty *) error "missing eXit for pid $p";; 421bf7aa99aSSimon J. Gerraty esac 422bf7aa99aSSimon J. Gerraty done ) || exit 1 4237750ad47SMarcel Moolenaar _nl=echo 4247750ad47SMarcel Moolenaar for f in $tf.dirdep $tf.qual $tf.srcdep 4257750ad47SMarcel Moolenaar do 4267750ad47SMarcel Moolenaar [ -s $f ] || continue 4277750ad47SMarcel Moolenaar case $f in 4287750ad47SMarcel Moolenaar *qual) # a list of .dirdep files 429ccfb9654SSimon J. Gerraty # we can prefix everything with $OBJTOP to 4307750ad47SMarcel Moolenaar # tell gendirdeps.mk that these are 4317750ad47SMarcel Moolenaar # DIRDEP entries, since they are already 4327750ad47SMarcel Moolenaar # qualified with .<machine> as needed. 4337750ad47SMarcel Moolenaar # We strip .$MACHINE though 4347750ad47SMarcel Moolenaar xargs cat < $f | sort -u | 43506137b0fSSimon J. Gerraty sed "s,^# ,,;s,^,$OBJTOP/,;s,\.${TARGET_SPEC:-$MACHINE}\$,,;s,\.$MACHINE\$,," 4367750ad47SMarcel Moolenaar ;; 4377750ad47SMarcel Moolenaar *) sort -u $f;; 4387750ad47SMarcel Moolenaar esac 4397750ad47SMarcel Moolenaar _nl=: 4407750ad47SMarcel Moolenaar done 4417750ad47SMarcel Moolenaar if [ -s $tf.dpdeps ]; then 4427750ad47SMarcel Moolenaar case "$DPDEPS" in 4437750ad47SMarcel Moolenaar */*) ;; 4447750ad47SMarcel Moolenaar *) echo > $DPDEPS;; # the echo is needed! 4457750ad47SMarcel Moolenaar esac 4467750ad47SMarcel Moolenaar sort -u $tf.dpdeps | 4477750ad47SMarcel Moolenaar sed "s,${SRCTOP}/,,;s,${SB_BACKING_SB:-$SB}/src/,," >> $DPDEPS 4487750ad47SMarcel Moolenaar fi 4497750ad47SMarcel Moolenaar # ensure we produce _something_ else egrep -v gets upset 4507750ad47SMarcel Moolenaar $_nl 4517750ad47SMarcel Moolenaar} 4527750ad47SMarcel Moolenaar 4537750ad47SMarcel Moolenaarcase /$0 in 4547750ad47SMarcel Moolenaar*/meta2dep*) meta2deps "$@";; 4557750ad47SMarcel Moolenaar*/meta2dirs*) meta2dirs "$@";; 4567750ad47SMarcel Moolenaar*/meta2src*) meta2src "$@";; 4577750ad47SMarcel Moolenaaresac 458