xref: /freebsd/targets/pseudo/bootstrap-packages/bootstrap-packages.sh (revision 0aa4a9fc859fd43343e2d7b5094a50d1ca0948eb)
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