187b759f0SSimon J. Gerraty#!/bin/sh 287b759f0SSimon J. Gerraty 387b759f0SSimon J. Gerraty# SPDX-License-Identifier: BSD-2-Clause 487b759f0SSimon J. Gerraty 587b759f0SSimon J. Gerraty# Our input is the output of something like: 687b759f0SSimon J. Gerraty# 787b759f0SSimon J. Gerraty# (cd ${SRCTOP} && 887b759f0SSimon J. Gerraty# find *bin etc lib* -name Makefile | 987b759f0SSimon J. Gerraty# xargs grep '^PACKAGE[[:space:]]*=' ) 1087b759f0SSimon J. Gerraty# 1187b759f0SSimon J. Gerraty# With some cleanup and looks like: 1287b759f0SSimon J. Gerraty# 1387b759f0SSimon J. Gerraty# usr.bin/ofed/libibverbs/Makefile:PACKAGE=FreeBSD-rdma 1487b759f0SSimon J. Gerraty# usr.bin/last/Makefile:PACKAGE=acct 1587b759f0SSimon J. Gerraty# usr.bin/lastcomm/Makefile:PACKAGE=acct 1687b759f0SSimon J. Gerraty# usr.bin/users/Makefile:PACKAGE=acct 1787b759f0SSimon J. Gerraty# usr.bin/who/Makefile:PACKAGE=acct 1887b759f0SSimon J. Gerraty# usr.sbin/ac/Makefile:PACKAGE=acct 1987b759f0SSimon J. Gerraty# usr.sbin/accton/Makefile:PACKAGE=acct 2087b759f0SSimon J. Gerraty# usr.sbin/lastlogin/Makefile:PACKAGE=acct 2187b759f0SSimon J. Gerraty# .. 2287b759f0SSimon J. Gerraty# 2387b759f0SSimon J. Gerraty# which we use to populate $PACKAGES/*/Makefile.depend 2487b759f0SSimon J. Gerraty# and $PACKAGES/Makefile.depend to make it easier to keep 2587b759f0SSimon J. Gerraty# Makefile.depend files throughout the tree up-to-date. 2687b759f0SSimon J. Gerraty# 272bdd404aSSimon J. Gerraty# We attempt to handle MK_* knobs that impact DIRDEPS, by 282bdd404aSSimon J. Gerraty# identifying the intermediate *bin and *lib Makefiles and 292bdd404aSSimon J. Gerraty# checking if they had a subdir for the current reldir via a construct 302bdd404aSSimon J. Gerraty# like: 312bdd404aSSimon J. Gerraty# 322bdd404aSSimon J. Gerraty# SUBDIR.${MK_OPT}+= sub 332bdd404aSSimon J. Gerraty# 342bdd404aSSimon J. Gerraty# in which case we extract the option OPT and add the reldir 352bdd404aSSimon J. Gerraty# to a Makefile.depend.options file in targets/packages/sub/ 362bdd404aSSimon J. Gerraty# 372bdd404aSSimon J. Gerraty# Of course the above is only *one* way optional SUBDIRs are handled 382bdd404aSSimon J. Gerraty# in the tree. We also attempt to handle: 392bdd404aSSimon J. Gerraty# 402bdd404aSSimon J. Gerraty# .if ${MK_OPT} == "yes" 412bdd404aSSimon J. Gerraty# SUBDIR+= sub 422bdd404aSSimon J. Gerraty# .endif 4387b759f0SSimon J. Gerraty# 4487b759f0SSimon J. Gerraty 4587b759f0SSimon J. GerratyMydir=`dirname $0` 4687b759f0SSimon J. Gerraty 472bdd404aSSimon J. GerratySKIP_LOG=return 482bdd404aSSimon J. Gerraty 4987b759f0SSimon J. Gerratywhile : 5087b759f0SSimon J. Gerratydo 5187b759f0SSimon J. Gerraty case "$1" in 5287b759f0SSimon J. Gerraty *=*) eval "$1"; shift;; 532bdd404aSSimon J. Gerraty -v) SKIP_LOG=:; shift;; 5487b759f0SSimon J. Gerraty *) break;; 5587b759f0SSimon J. Gerraty esac 5687b759f0SSimon J. Gerratydone 5787b759f0SSimon J. Gerraty 5887b759f0SSimon J. Gerratyto_reldir() { 5987b759f0SSimon J. Gerraty sed "s,$SRCTOP/,," 6087b759f0SSimon J. Gerraty} 6187b759f0SSimon J. Gerraty 6287b759f0SSimon J. GerratySRCTOP=${SRCTOP:-$(realpath $Mydir/../../..)} 632bdd404aSSimon J. Gerraty. ${SRCTOP}/libexec/rc/debug.sh 642bdd404aSSimon J. GerratyDebugOn bootstrap-packages 652bdd404aSSimon J. Gerraty 6687b759f0SSimon J. GerratyPACKAGES=${PACKAGES:-$(realpath $Mydir/../..)} 6787b759f0SSimon J. Gerratycase "$PACKAGES" in 6887b759f0SSimon J. Gerraty/*) ;; 6987b759f0SSimon J. Gerraty*) PACKAGES=$SRCTOP/$PACKAGES;; 7087b759f0SSimon J. Gerratyesac 7187b759f0SSimon J. Gerraty 7287b759f0SSimon J. Gerratyscript_name=$(realpath $0 | to_reldir) 7387b759f0SSimon J. Gerraty 742bdd404aSSimon J. Gerratylog() { 752bdd404aSSimon J. Gerraty $SKIP_LOG 0 762bdd404aSSimon J. Gerraty echo $1 | to_reldir >&2 772bdd404aSSimon J. Gerraty} 782bdd404aSSimon J. Gerraty 7987b759f0SSimon J. Gerratystart_depend() { 8087b759f0SSimon J. Gerraty depfile=$1 8187b759f0SSimon J. Gerraty 822bdd404aSSimon J. Gerraty log $1 8387b759f0SSimon J. Gerraty mkdir -p ${depfile%/*} 8487b759f0SSimon J. Gerraty cat <<EOF > $depfile 8587b759f0SSimon J. Gerraty# Generated by $script_name 8687b759f0SSimon J. Gerraty 8787b759f0SSimon J. GerratyDIRDEPS= \\ 8887b759f0SSimon J. GerratyEOF 8987b759f0SSimon J. Gerraty} 9087b759f0SSimon J. Gerraty 9187b759f0SSimon J. Gerratyend_depend() { 922bdd404aSSimon J. Gerraty end_options $1.options 932bdd404aSSimon J. Gerraty cat <<EOF >> $1 9487b759f0SSimon J. Gerraty 9587b759f0SSimon J. Gerraty.include <dirdeps.mk> 9687b759f0SSimon J. GerratyEOF 9787b759f0SSimon J. Gerraty} 9887b759f0SSimon J. Gerraty 992bdd404aSSimon J. Gerratystart_options() { 1002bdd404aSSimon J. Gerraty ofile=$1 1012bdd404aSSimon J. Gerraty 1022bdd404aSSimon J. Gerraty log $1 1032bdd404aSSimon J. Gerraty mkdir -p ${ofile%/*} 1042bdd404aSSimon J. Gerraty opts=$opt 1052bdd404aSSimon J. Gerraty eq== 1062bdd404aSSimon J. Gerraty cat <<EOF > $ofile 1072bdd404aSSimon J. Gerraty# Generated by $script_name 1082bdd404aSSimon J. Gerraty 1092bdd404aSSimon J. GerratyDIRDEPS_OPTIONS= $opt 1102bdd404aSSimon J. GerratyEOF 1112bdd404aSSimon J. Gerraty} 1122bdd404aSSimon J. Gerraty 1132bdd404aSSimon J. Gerratyend_options() { 1142bdd404aSSimon J. Gerraty test -s $1 || return 1152bdd404aSSimon J. Gerraty cat <<EOF >> $1 1162bdd404aSSimon J. Gerraty 1172bdd404aSSimon J. Gerraty.include <dirdeps-options.mk> 1182bdd404aSSimon J. GerratyEOF 1192bdd404aSSimon J. Gerraty} 1202bdd404aSSimon J. Gerraty 121*0aa4a9fcSSimon J. Gerratyno_plus() { 122*0aa4a9fcSSimon J. Gerraty case "$1" in 123*0aa4a9fcSSimon J. Gerraty *+*) echo "$1" | sed 's,+,\\\\+,g';; 124*0aa4a9fcSSimon J. Gerraty *) echo "$1";; 125*0aa4a9fcSSimon J. Gerraty esac 126*0aa4a9fcSSimon J. Gerraty} 127*0aa4a9fcSSimon J. Gerraty 1282bdd404aSSimon J. Gerratyfind_opt() { 1292bdd404aSSimon J. Gerraty mf=$1 130*0aa4a9fcSSimon J. Gerraty sub="`no_plus $2`" 1312bdd404aSSimon J. Gerraty shift 2 1322bdd404aSSimon J. Gerraty egrep "$@" "^[^#].*[[:space:]]$sub([[:space:]]|\$)" $mf | 1332bdd404aSSimon J. Gerraty tr '{' '\n' | 1342bdd404aSSimon J. Gerraty sed -n 's,^MK_\([^}]*\).*,\1,p' | 1352bdd404aSSimon J. Gerraty tr '\n' ' ' 1362bdd404aSSimon J. Gerraty} 1372bdd404aSSimon J. Gerraty 13887b759f0SSimon J. Gerratystart_depend $PACKAGES/Makefile.depend || exit 1 13987b759f0SSimon J. Gerratysort -t= -k2 "$@" | sed 's,/Makefile:PACKAGE=, ,' | 14087b759f0SSimon J. Gerraty( 14187b759f0SSimon J. Gerraty lpackage= 14287b759f0SSimon J. Gerraty while read reldir package 14387b759f0SSimon J. Gerraty do 1442bdd404aSSimon J. Gerraty # use these below 1452bdd404aSSimon J. Gerraty dname=${reldir%/*} 1462bdd404aSSimon J. Gerraty bname=${reldir##*/} 1472bdd404aSSimon J. Gerraty # check parent does not have it commented out 1482bdd404aSSimon J. Gerraty # otherwise we should ignore it. 149*0aa4a9fcSSimon J. Gerraty # if the parent makefile does not exist, we will skip it. 1502bdd404aSSimon J. Gerraty pmf=$SRCTOP/$dname/Makefile 151*0aa4a9fcSSimon J. Gerraty egrep -q "^[^#].*[[:space:]]`no_plus $bname`([[:space:]]|\$)" $pmf 2> /dev/null || continue 1522bdd404aSSimon J. Gerraty : reldir=$reldir 1532bdd404aSSimon J. Gerraty case "$reldir" in 1542bdd404aSSimon J. Gerraty *lib/*) sub=${reldir#*lib/};; 1552bdd404aSSimon J. Gerraty *bin/*) sub=${reldir#*bin/};; 1562bdd404aSSimon J. Gerraty *libexec/*) sub=${reldir#*libexec/};; 1572bdd404aSSimon J. Gerraty *) opt= sub=;; 1582bdd404aSSimon J. Gerraty esac 1592bdd404aSSimon J. Gerraty if [ -n "$sub" ]; then 1602bdd404aSSimon J. Gerraty smf=${SRCTOP}/${reldir%/$sub}/Makefile 1612bdd404aSSimon J. Gerraty # now we need just the immediate subdir 1622bdd404aSSimon J. Gerraty sub=${sub%%/*} 1632bdd404aSSimon J. Gerraty # SUBDIR.${MK_OPT}+= sub 1642bdd404aSSimon J. Gerraty opt=`find_opt $smf $sub` 1652bdd404aSSimon J. Gerraty # .if ${MK_OPT} == "yes" 1662bdd404aSSimon J. Gerraty # SUBDIR+= sub 1672bdd404aSSimon J. Gerraty opt=${opt:-`find_opt $smf $sub -B2`} 1682bdd404aSSimon J. Gerraty fi 1692bdd404aSSimon J. Gerraty case "$reldir" in 1702bdd404aSSimon J. Gerraty */tests|*/tests/*) opt=${opt:-TESTS};; 1712bdd404aSSimon J. Gerraty esac 1722bdd404aSSimon J. Gerraty # PACKAGES is set to either a simple string like 'runtime' 1732bdd404aSSimon J. Gerraty # or for some libraries 'lib${LIB}' 1742bdd404aSSimon J. Gerraty # or even 'lib${LIB:tl}' when LIB contains upper case 1752bdd404aSSimon J. Gerraty # the majority of libs in FreeBSD use lib${LIB} for their dirname 1762bdd404aSSimon J. Gerraty # but we allow for just ${LIB} too. 1772bdd404aSSimon J. Gerraty : package=$package 17887b759f0SSimon J. Gerraty case "$package" in \ 1792bdd404aSSimon J. Gerraty lib?{LIB*) package=`echo lib${bname#lib} | tr 'A-Z' 'a-z'`;; 18087b759f0SSimon J. Gerraty esac 18187b759f0SSimon J. Gerraty if test "$package" != "$lpackage"; then \ 18287b759f0SSimon J. Gerraty test -z "$lpackage" || end_depend $ddeps 18387b759f0SSimon J. Gerraty target=$PACKAGES/$package 18487b759f0SSimon J. Gerraty ddeps=$target/Makefile.depend 1852bdd404aSSimon J. Gerraty odeps=$ddeps.options 1862bdd404aSSimon J. Gerraty rm -f $odeps 18787b759f0SSimon J. Gerraty start_depend $ddeps 18887b759f0SSimon J. Gerraty lpackage=$package 18987b759f0SSimon J. Gerraty echo " $target \\" 19087b759f0SSimon J. Gerraty fi 1912bdd404aSSimon J. Gerraty if [ -n "$opt" ]; then 1922bdd404aSSimon J. Gerraty [ -s $odeps ] || start_options $odeps 1932bdd404aSSimon J. Gerraty { 1942bdd404aSSimon J. Gerraty case " $opts " in 1952bdd404aSSimon J. Gerraty *" $opt "*) ;; 1962bdd404aSSimon J. Gerraty *) echo DIRDEPS_OPTIONS+= $opt 1972bdd404aSSimon J. Gerraty opts="$opts $opt" 1982bdd404aSSimon J. Gerraty eq== 1992bdd404aSSimon J. Gerraty ;; 2002bdd404aSSimon J. Gerraty esac 2012bdd404aSSimon J. Gerraty for o in $opt 2022bdd404aSSimon J. Gerraty do 2032bdd404aSSimon J. Gerraty echo DIRDEPS.$o.yes$eq $reldir 2042bdd404aSSimon J. Gerraty done 2052bdd404aSSimon J. Gerraty eq=+= 2062bdd404aSSimon J. Gerraty } >> $odeps 2072bdd404aSSimon J. Gerraty else 20887b759f0SSimon J. Gerraty echo " $reldir \\" >> $ddeps 2092bdd404aSSimon J. Gerraty fi 21087b759f0SSimon J. Gerraty done 21187b759f0SSimon J. Gerraty end_depend $ddeps 21287b759f0SSimon J. Gerraty) | to_reldir >> $PACKAGES/Makefile.depend 21387b759f0SSimon J. Gerratyend_depend $PACKAGES/Makefile.depend 214