Module Name: src Committed By: kre Date: Fri Dec 20 22:24:20 UTC 2024
Modified Files: src: build.sh Log Message: General code cleanup. No operational change intended. Mostly fix quoting, some missing quotes added, lots of meaningless quotes removed (no guarantee of completeness in either of those). Also get rid of one use of the obsolete test -o operator, and several less than ideal uses of the test ! operator ... replace all that by shell || and ! uses. Don't use $@ in any context where field splitting cannot occur (also avoid it in a couple of places where it would be defined, but isn't actually wanted: echo "whatever: $@" is technically OK, but is generally just a waste of everyone's time, the shell passing a whole set of args to echo for it to combine back into one line is pointless. But X="$@" and using $@ in a here doc are simply wrong. The 80-column police visited during the update (just a couple of hard cases managed to avoid detection). Many extraneous use of sh \ line continuations removed when better use of sh syntax means they're not required. General cleanup of sh coding style (prefer clarity over white space minimization). If these changes cause any issues (aside from a small possibility of slight layout changes in some error messages) that anyone is able to observe, please let me know. To generate a diff of this commit: cvs rdiff -u -r1.385 -r1.386 src/build.sh Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/build.sh diff -u src/build.sh:1.385 src/build.sh:1.386 --- src/build.sh:1.385 Fri Dec 20 15:56:45 2024 +++ src/build.sh Fri Dec 20 22:24:20 2024 @@ -1,5 +1,5 @@ #! /usr/bin/env sh -# $NetBSD: build.sh,v 1.385 2024/12/20 15:56:45 riastradh Exp $ +# $NetBSD: build.sh,v 1.386 2024/12/20 22:24:20 kre Exp $ # # Copyright (c) 2001-2023 The NetBSD Foundation, Inc. # All rights reserved. @@ -41,7 +41,7 @@ # suitable shell, then we show a message and exit. # -errmsg='' # error message, if not empty +errmsg= # error message, if not empty shelltest=false # if true, exit after testing the shell re_exec_allowed=true # if true, we may exec under another shell @@ -49,12 +49,12 @@ re_exec_allowed=true # if true, we may e # for internal use only, are not documented, and are not valid anywhere # other than $1. case "$1" in -"--shelltest") +--shelltest) shelltest=true re_exec_allowed=false shift ;; -"--no-re-exec") +--no-re-exec) re_exec_allowed=false shift ;; @@ -64,8 +64,14 @@ esac # This is the first feature that we test, because subsequent # tests use "!". # -if test -z "$errmsg"; then - if ( eval '! false' ) >/dev/null 2>&1 ; then +# Unfortunately, if the shell doesn't support ! most of the tests +# following which use '!' are likely to simply abort with a syntax error. +# Not executing the code containing ! does not avoid compiling it. +# +if test -z "$errmsg" +then + if ( eval '! false' ) >/dev/null 2>&1 + then : else errmsg='Shell does not support "!".' @@ -74,7 +80,8 @@ fi # Does the shell support functions? # -if test -z "$errmsg"; then +if test -z "$errmsg" +then if ! ( eval 'somefunction() { : ; }' ) >/dev/null 2>&1 @@ -91,9 +98,10 @@ fi # ksh93 fails this test; it uses an incompatible syntax involving the # keywords 'function' and 'typeset'. # -if test -z "$errmsg"; then +if test -z "$errmsg" +then if ! ( - eval 'f() { local v=2; }; v=1; f && test x"$v" = x"1"' + eval 'f() { local v=2; }; v=1; f && test x"$v" = x1' ) >/dev/null 2>&1 then errmsg='Shell does not support the "local" keyword in functions.' @@ -103,9 +111,10 @@ fi # Does the shell support ${var%suffix}, ${var#prefix}, and their variants? # # We don't bother testing for ${var+value}, ${var-value}, or their variants, -# since shells without those are sure to fail other tests too. +# since shells without those (unlikely) are sure to fail other tests too. # -if test -z "$errmsg"; then +if test -z "$errmsg" +then if ! ( eval 'var=a/b/c ; test x"${var#*/};${var##*/};${var%/*};${var%%/*}" = \ @@ -120,7 +129,8 @@ fi # # zsh in normal mode (as opposed to "emulate sh" mode) fails this test. # -if test -z "$errmsg"; then +if test -z "$errmsg" +then if ! ( eval 'IFS=: ; v=":a b::c" ; set -- $v ; IFS=+ ; test x"$#;$1,$2,$3,$4;$*" = x"4;,a b,,c;+a b++c"' @@ -134,10 +144,12 @@ fi # # Some versions of zsh fail this test, even in "emulate sh" mode. # -if test -z "$errmsg"; then +if test -z "$errmsg" +then if ! ( - eval 'set -- "a a a" "b b b"; set -- ${1+"$@"}; - test x"$#;$1;$2" = x"2;a a a;b b b";' + eval 'set -- "a a a" "b b b" + set -- ${1+"$@"} + test x"$#;$1;$2" = x"2;a a a;b b b" ' ) >/dev/null 2>&1 then errmsg='Shell does not support ${1+"$@"}.' @@ -146,9 +158,10 @@ fi # Does the shell support $(...) command substitution? # -if test -z "$errmsg"; then +if test -z "$errmsg" +then if ! ( - eval 'var=$(echo abc); test x"$var" = x"abc"' + eval 'var=$(echo abc); test x"$var" = xabc' ) >/dev/null 2>&1 then errmsg='Shell does not support "$(...)" command substitution.' @@ -161,7 +174,8 @@ fi # Some shells known to fail this test are: NetBSD /bin/ksh (as of 2009-12), # bash-3.1, pdksh-5.2.14, zsh-4.2.7 in "emulate sh" mode. # -if test -z "$errmsg"; then +if test -z "$errmsg" +then if ! ( eval 'var=$(case x in x) echo abc;; esac); test x"$var" = x"abc"' ) >/dev/null 2>&1 @@ -173,8 +187,10 @@ if test -z "$errmsg"; then fi # Does the shell support getopts or getopt? +# (XXX: Q: why the need for the eval here, looks unncessary) # -if test -z "$errmsg"; then +if test -z "$errmsg" +then if ! ( eval 'type getopts || type getopt' ) >/dev/null 2>&1 @@ -186,8 +202,10 @@ fi # # If shelltest is true, exit now, reporting whether or not the shell is good. # -if $shelltest; then - if test -n "$errmsg"; then +if "$shelltest" +then + if test -n "$errmsg" + then echo >&2 "$0: $errmsg" exit 1 else @@ -201,8 +219,10 @@ fi # Loops are broken by passing an extra "--no-re-exec" flag to the new # instance of this script. # -if test -n "$errmsg"; then - if $re_exec_allowed; then +if test -n "$errmsg" +then + if "$re_exec_allowed" + then for othershell in \ "${HOST_SH}" /usr/xpg4/bin/sh ksh ksh88 mksh pdksh dash bash # NOTE: some shells known not to work are: @@ -213,7 +233,7 @@ if test -n "$errmsg"; then do test -n "$othershell" || continue if eval 'type "$othershell"' >/dev/null 2>&1 \ - && "$othershell" "$0" --shelltest >/dev/null 2>&1 + && $othershell "$0" --shelltest >/dev/null 2>&1 then cat <<EOF $0: $errmsg @@ -271,7 +291,7 @@ bomb() { cat >&2 <<ERRORMESSAGE -ERROR: $@ +ERROR: $* *** BUILD ABORTED *** ERRORMESSAGE @@ -289,11 +309,12 @@ ERRORMESSAGE # eval "\$command $quotedlist \$filename" # shell_quote() -{( - local result='' +( + local result= local arg qarg LC_COLLATE=C ; export LC_COLLATE # so [a-zA-Z0-9] works in ASCII - for arg in "$@" ; do + for arg in "$@" + do case "${arg}" in '') qarg="''" @@ -306,12 +327,12 @@ shell_quote() # beginning and end of the result and as part of # '\'''\'' sequences that result from multiple # adjacent quotes in he input. - qarg="$(printf "%s\n" "$arg" | \ + qarg=$(printf "%s\n" "$arg" | ${SED:-sed} -e "s/'/'\\\\''/g" \ -e "1s/^/'/" -e "\$s/\$/'/" \ -e "1s/^''//" -e "\$s/''\$//" \ -e "s/'''/'/g" - )" + ) ;; *) # Arg is not the empty string, and does not contain @@ -323,19 +344,20 @@ shell_quote() result="${result}${result:+ }${qarg}" done printf "%s\n" "$result" -)} +) statusmsg() { - ${runcmd} echo "===> $@" | tee -a "${results}" + ${runcmd} echo "===> $*" | tee -a "${results}" } statusmsg2() { local msg - msg="${1}" + msg=${1} shift + case "${msg}" in ????????????????*) ;; ??????????*) msg="${msg} ";; @@ -355,7 +377,7 @@ statusmsg2() warning() { - statusmsg "Warning: $@" + statusmsg "Warning: $*" } # Find a program in the PATH, and show the result. If not found, @@ -364,18 +386,19 @@ warning() # find_in_PATH() { - local prog="$1" - local result="${2-"$1"}" - local oldIFS="${IFS}" + local prog=$1 + local result=${2-$1} local dir - IFS=":" - for dir in ${PATH}; do - if [ -x "${dir}/${prog}" ]; then - result="${dir}/${prog}" + local IFS=: + + for dir in ${PATH} + do + if [ -x "${dir}/${prog}" ] + then + result=${dir}/${prog} break fi done - IFS="${oldIFS}" echo "${result}" } @@ -389,8 +412,10 @@ set_HOST_SH() # Solaris has /usr/xpg4/bin/sh. # - [ -z "${HOST_SH}" ] && [ x"${uname_s}" = x"SunOS" ] && \ - [ -x /usr/xpg4/bin/sh ] && HOST_SH="/usr/xpg4/bin/sh" + [ -z "${HOST_SH}" ] && + [ "${uname_s}" = SunOS ] && + [ -x /usr/xpg4/bin/sh ] && + HOST_SH=/usr/xpg4/bin/sh # Try to get the name of the shell that's running this script, # by parsing the output from "ps". We assume that, if the host @@ -405,8 +430,12 @@ set_HOST_SH() # If we get the wrong result here, the user can override it by # specifying HOST_SH in the environment. # - [ -z "${HOST_SH}" ] && HOST_SH="$( - (ps -p $$ -o comm | sed -ne "2s/[ ${tab}]*\$//p") 2>/dev/null )" + [ -z "${HOST_SH}" ] && HOST_SH=$( + ( + ps -p $$ -o comm | + sed -ne "2s/[ ${tab}]*\$//p" + ) 2>/dev/null + ) # If nothing above worked, use "sh". We will later find the # first directory in the PATH that has a "sh" program. @@ -461,8 +490,8 @@ initdefaults() [ -d usr.bin/make ] || cd "$(dirname $0)" [ -d usr.bin/make ] || - bomb "usr.bin/make not found; build.sh must be run from the top \ -level of source directory" + bomb "usr.bin/make not found; build.sh must be run from" \ + "the top level of source directory" [ -f share/mk/bsd.own.mk ] || bomb "src/share/mk is missing; please re-fetch the source tree" @@ -510,8 +539,11 @@ level of source directory" # every occurrence of pwd to use -P. # # XXX Except that doesn't work on Solaris. Or many Linuces. + # And the standard says altering PWD produces unspecified results + # So instead just cd -P to $PWD which should make PWD be symlink free # - unset PWD + cd -P "${PWD}" || bomb "Cannot cd to \$PWD ($PWD)" + # At this point TOP=$PWD should just work, but let's be ultra safe. TOP=$( (exec pwd -P 2>/dev/null) || (exec pwd 2>/dev/null) ) # The user can set HOST_SH in the environment, or we try to @@ -598,11 +630,12 @@ level of source directory" # Set the BUILDSEED to NetBSD-"N" # - setmakeenv BUILDSEED "NetBSD-$(${HOST_SH} ${TOP}/sys/conf/osrelease.sh -m)" + setmakeenv BUILDSEED \ + "NetBSD-$(${HOST_SH} ${TOP}/sys/conf/osrelease.sh -m)" # Set MKARZERO to "yes" # - setmakeenv MKARZERO "yes" + setmakeenv MKARZERO yes } @@ -741,16 +774,17 @@ MACHINE=zaurus MACHINE_ARCH=earm ALIAS= getarch() { local IFS - local found="" + local found= local line IFS="${nl}" makewrappermachine="${MACHINE}" - for line in ${valid_MACHINE_ARCH}; do + for line in ${valid_MACHINE_ARCH} + do line="${line%%#*}" # ignore comments line="$( IFS=" ${tab}" ; echo $line )" # normalise white space case "${line} " in - " ") + ' ') # skip blank lines or comment lines continue ;; @@ -789,8 +823,9 @@ getarch() ;; "MACHINE="*" MACHINE_ARCH="*) # Obey the MACHINE= and MACHINE_ARCH= parts of the line. - IFS=" " - for frag in ${found}; do + IFS=' ' + for frag in ${found} + do case "$frag" in MACHINE=*|MACHINE_ARCH=*) eval "$frag" @@ -816,16 +851,18 @@ validatearch() case "${MACHINE_ARCH}" in "") - bomb "No MACHINE_ARCH provided. Use 'build.sh -m ${MACHINE} list-arch' to show options" + bomb "No MACHINE_ARCH provided." \ + "Use 'build.sh -m ${MACHINE} list-arch' to show options" ;; esac IFS="${nl}" - for line in ${valid_MACHINE_ARCH}; do + for line in ${valid_MACHINE_ARCH} + do line="${line%%#*}" # ignore comments line="$( IFS=" ${tab}" ; echo $line )" # normalise white space case "${line} " in - " ") + ' ') # skip blank lines or comment lines continue ;; @@ -863,9 +900,9 @@ validatearch() # listarch() { - local machglob="$1" archglob="$2" + local machglob=$1 archglob=$2 local IFS - local wildcard="*" + local wildcard='*' local line xline frag local line_matches_machine line_matches_arch local found=false @@ -875,7 +912,8 @@ listarch() : "${archglob:=${wildcard}}" IFS="${nl}" - for line in ${valid_MACHINE_ARCH}; do + for line in ${valid_MACHINE_ARCH} + do line="${line%%#*}" # ignore comments xline="$( IFS=" ${tab}" ; echo $line )" # normalise white space [ -z "${xline}" ] && continue # skip blank or comment lines @@ -883,8 +921,9 @@ listarch() line_matches_machine=false line_matches_arch=false - IFS=" " - for frag in ${xline}; do + IFS=' ' + for frag in ${xline} + do case "${frag}" in MACHINE=${machglob}) line_matches_machine=true ;; @@ -895,12 +934,14 @@ listarch() esac done - if $line_matches_machine && $line_matches_arch; then + if $line_matches_machine && $line_matches_arch + then found=true echo "$line" fi done - if ! $found; then + if ! $found + then echo >&2 "No match for" \ "MACHINE=${machglob} MACHINE_ARCH=${archglob}" return 1 @@ -942,7 +983,8 @@ bomb_getmakevar() # getmakevar() { - if [ -x "${make}" ]; then + if [ -x "${make}" ] + then bomb_getmakevar "$1" else echo "\$$1" @@ -993,7 +1035,8 @@ clearmakeenv() { local var - for var in ${makeenv}; do + for var in ${makeenv} + do unset ${var} done } @@ -1003,12 +1046,13 @@ clearmakeenv() # resolvepaths() { - local var="$1" + local var=$1 local val eval val=\"\${${var}}\" - local newval='' + local newval= local word - for word in ${val}; do + for word in ${val} + do resolvepath word newval="${newval}${newval:+ }${word}" done @@ -1021,7 +1065,7 @@ resolvepaths() # resolvepath() { - local var="$1" + local var=$1 local val eval val=\"\${${var}}\" case "${val}" in @@ -1067,7 +1111,8 @@ help() Other OPERATIONs: help Show this help message, and exit. - makewrapper Create ${toolprefix}make-\${MACHINE} wrapper and ${toolprefix}make. + makewrapper Create ${toolprefix}make-\${MACHINE} wrapper + and ${toolprefix}make. Always performed. cleandir Run "make cleandir". [Default unless -u is used] dtb Build devicetree blobs. @@ -1173,7 +1218,8 @@ _usage_ # usage() { - if [ -n "$*" ]; then + if [ -n "$*" ] + then echo 1>&2 "" echo 1>&2 "${progname}: $*" fi @@ -1183,12 +1229,13 @@ usage() parseoptions() { - opts='a:B:C:c:D:Ehj:M:m:N:nO:oPR:rS:T:UuV:w:X:xZ:' + opts=a:B:C:c:D:Ehj:M:m:N:nO:oPR:rS:T:UuV:w:X:xZ: opt_a=false opt_m=false local did_show_info=false - if type getopts >/dev/null 2>&1; then + if type getopts >/dev/null 2>&1 + then # Use POSIX getopts. # getoptcmd='getopts :${opts} opt && opt=-${opt}' @@ -1211,7 +1258,8 @@ parseoptions() # Parse command line options. # - while eval ${getoptcmd}; do + while eval ${getoptcmd} + do case ${opt} in -a) @@ -1226,7 +1274,8 @@ parseoptions() ;; -C) - eval ${optargcmd}; resolvepaths OPTARG + eval ${optargcmd} + resolvepaths OPTARG CDEXTRA="${CDEXTRA}${CDEXTRA:+ }${OPTARG}" ;; @@ -1246,7 +1295,8 @@ parseoptions() ;; -D) - eval ${optargcmd}; resolvepath OPTARG + eval ${optargcmd} + resolvepath OPTARG setmakeenv DESTDIR "${OPTARG}" ;; @@ -1260,7 +1310,8 @@ parseoptions() ;; -M) - eval ${optargcmd}; resolvepath OPTARG + eval ${optargcmd} + resolvepath OPTARG case "${OPTARG}" in \$*) usage "-M argument must not begin with '\$'" ;; @@ -1320,7 +1371,8 @@ parseoptions() ;; -R) - eval ${optargcmd}; resolvepath OPTARG + eval ${optargcmd} + resolvepath OPTARG setmakeenv RELEASEDIR "${OPTARG}" ;; @@ -1335,7 +1387,8 @@ parseoptions() ;; -T) - eval ${optargcmd}; resolvepath OPTARG + eval ${optargcmd} + resolvepath OPTARG TOOLDIR="${OPTARG}" export TOOLDIR ;; @@ -1365,12 +1418,14 @@ parseoptions() ;; -w) - eval ${optargcmd}; resolvepath OPTARG + eval ${optargcmd} + resolvepath OPTARG makewrapper="${OPTARG}" ;; -X) - eval ${optargcmd}; resolvepath OPTARG + eval ${optargcmd} + resolvepath OPTARG setmakeenv X11SRCDIR "${OPTARG}" ;; @@ -1394,7 +1449,8 @@ parseoptions() ;; '-?') - if [ "${OPTARG}" = '?' ]; then + if [ "${OPTARG}" = '?' ] + then help exit 0 fi @@ -1415,7 +1471,8 @@ parseoptions() # Validate operations. # eval ${optremcmd} - while [ $# -gt 0 ]; do + while [ $# -gt 0 ] + do op=$1; shift operations="${operations} ${op}" @@ -1432,13 +1489,13 @@ parseoptions() ;; mkrepro-timestamp) setup_mkrepro quiet - echo ${MKREPRO_TIMESTAMP:-0} + echo "${MKREPRO_TIMESTAMP:-0}" did_show_info=true ;; show-revisionid) setup_mkrepro quiet - echo ${NETBSD_REVISIONID} + echo "${NETBSD_REVISIONID}" did_show_info=true ;; @@ -1512,19 +1569,23 @@ parseoptions() eval do_${op}=true done - [ "$did_show_info" = true ] && [ ${MKREPRO_TIMESTAMP:-0} -ne 0 ] && exit + "$did_show_info" && [ "${MKREPRO_TIMESTAMP:-0}" -ne 0 ] && exit [ -n "${operations}" ] || usage "Missing OPERATION to perform" # Set up MACHINE*. On a NetBSD host, these are allowed to be unset. # - if [ -z "${MACHINE}" ]; then - [ "${uname_s}" = "NetBSD" ] || - bomb "MACHINE must be set, or -m must be used, for cross builds" + if [ -z "${MACHINE}" ] + then + [ "${uname_s}" = NetBSD ] || { + bomb "MACHINE must be set, or -m must be used," \ + "for cross builds" + } MACHINE=${uname_m} MACHINE_ARCH=${uname_p} fi - if $opt_m && ! $opt_a; then + if $opt_m && ! $opt_a + then # Settings implied by the command line -m option # override MACHINE_ARCH from the environment (if any). getarch @@ -1540,7 +1601,7 @@ parseoptions() MAKEFLAGS="-de -m ${TOP}/share/mk ${MAKEFLAGS}" MAKEFLAGS="${MAKEFLAGS} MKOBJDIRS=${MKOBJDIRS-yes}" export MAKEFLAGS MACHINE MACHINE_ARCH - setmakeenv USETOOLS "yes" + setmakeenv USETOOLS yes setmakeenv MAKEWRAPPERMACHINE "${makewrappermachine:-${MACHINE}}" setmakeenv MAKE_OBJDIR_CHECK_WRITABLE no } @@ -1552,11 +1613,13 @@ sanitycheck() { # Install as non-root is a bad idea. # - if ${do_install} && [ "$id_u" -ne 0 ] ; then - if ${do_expertmode}; then - warning "Will install as an unprivileged user" + if ${do_install} && [ "$id_u" -ne 0 ] + then + if ${do_expertmode} + then + warning "Will install as an unprivileged user" else - bomb "-E must be set for install as an unprivileged user" + bomb "-E must be set for install as an unprivileged user" fi fi @@ -1570,7 +1633,8 @@ sanitycheck() path="${path%:.}" # delete trailing ":." case ":${path}:/" in *:[!/~]*) - if ${do_expertmode}; then + if ${do_expertmode} + then warning "PATH contains non-absolute components" else bomb "PATH environment variable must not" \ @@ -1579,10 +1643,11 @@ sanitycheck() ;; esac - while [ ${MKX11-no} = "yes" ]; do # not really a loop + while [ "${MKX11-no}" = yes ] # not really a loop + do test -n "${X11SRCDIR}" && { test -d "${X11SRCDIR}/external" || - bomb "X11SRCDIR (${X11SRCDIR}) does not exist (with -x)" + bomb "X11SRCDIR (${X11SRCDIR}) does not exist (with -x)" break } for _xd in \ @@ -1592,12 +1657,13 @@ sanitycheck() do test -f "${_xd}/Makefile" && setmakeenv X11SRCDIR "${_xd}" && - break 2 + break 2 done bomb "Asked to build X11 but no xsrc" done - while $do_pkg; do # not really a loop + while $do_pkg # not really a loop + do test -n "${PKGSRCDIR}" && { test -f "${PKGSRCDIR}/mk/bsd.pkg.mk" || bomb "PKGSRCDIR (${PKGSRCDIR}) does not exist" @@ -1610,18 +1676,19 @@ sanitycheck() do test -f "${_pd}/mk/bsd.pkg.mk" && setmakeenv PKGSRCDIR "${_pd}" && - break 2 + break 2 done bomb "Asked to build package but no pkgsrc" done - if $do_pkg && [ "${MKX11-no}" = yes ]; then + if $do_pkg && [ "${MKX11-no}" = yes ] + then # See comment below about X11_TYPE in pkgsrc mk.conf. # (Feel free to remove this, and set X11_TYPE to # native/modular according to MKX11=yes/no, if you want # to do the work to make X11_TYPE=native cross-builds # work.) bomb "Experimental \`build.sh pkg=...'" \ - "does not support -x/MKX11=yes" + "does not support -x/MKX11=yes" fi } @@ -1637,7 +1704,8 @@ print_tooldir_program() local tooldir_program local program=${1} - if [ -n "${TOOLDIR}" ]; then + if [ -n "${TOOLDIR}" ] + then echo "${TOOLDIR}/bin/${toolprefix}${program}" return fi @@ -1645,11 +1713,11 @@ print_tooldir_program() # Set host_ostype to something like "NetBSD-4.5.6-i386". This # is intended to match the HOST_OSTYPE variable in <bsd.own.mk>. # - local host_ostype="${uname_s}-$( - echo "${uname_r}" | sed -e 's/([^)]*)//g' -e 's/ /_/g' + local host_ostype=${uname_s}-$( + echo "${uname_r}" | sed -e 's/([^)]*)//g' -e 's/ /_/g' )-$( - echo "${uname_p}" | sed -e 's/([^)]*)//g' -e 's/ /_/g' - )" + echo "${uname_p}" | sed -e 's/([^)]*)//g' -e 's/ /_/g' + ) # Look in a few potential locations for # ${possible_TOOLDIR}/bin/${toolprefix}${program}. @@ -1672,15 +1740,16 @@ print_tooldir_program() "${TOP}/obj" \ "${TOP}/obj.${MACHINE}" do - [ -n "${possible_TOP_OBJ}" ] || continue - possible_TOOLDIR="${possible_TOP_OBJ}/tooldir.${host_ostype}" - possible_program="${possible_TOOLDIR}/bin/${toolprefix}${program}" - if [ -x "${possible_program}" ]; then - echo ${possible_program} - return; - fi + [ -n "${possible_TOP_OBJ}" ] || continue + possible_TOOLDIR="${possible_TOP_OBJ}/tooldir.${host_ostype}" + possible_program="${possible_TOOLDIR}/bin/${toolprefix}${program}" + if [ -x "${possible_program}" ] + then + echo ${possible_program} + return + fi done - echo "" + echo '' } # print_tooldir_make -- @@ -1727,16 +1796,19 @@ print_tooldir_make() # the value of TOOLDIR. Believe the result only if it's # a directory that already exists and contains bin/${toolprefix}make. # - if [ -x "${possible_make}" ]; then - possible_TOOLDIR="$( + if [ -x "${possible_make}" ] + then + possible_TOOLDIR=$( make="${possible_make}" \ - nobomb_getmakevar TOOLDIR 2>/dev/null - )" - if [ $? = 0 ] && [ -n "${possible_TOOLDIR}" ] \ - && [ -d "${possible_TOOLDIR}" ]; + nobomb_getmakevar TOOLDIR 2>/dev/null + ) + if [ $? = 0 ] && + [ -n "${possible_TOOLDIR}" ] && + [ -d "${possible_TOOLDIR}" ] then tooldir_make="${possible_TOOLDIR}/bin/${toolprefix}make" - if [ -x "${tooldir_make}" ]; then + if [ -x "${tooldir_make}" ] + then echo "${tooldir_make}" return 0 fi @@ -1780,9 +1852,12 @@ print_tooldir_make() rebuildmake() { make="$(print_tooldir_make)" - if [ -n "${make}" ] && [ -x "${make}" ]; then - for f in usr.bin/make/*.[ch]; do - if [ "${f}" -nt "${make}" ]; then + if [ -n "${make}" ] && [ -x "${make}" ] + then + for f in usr.bin/make/*.[ch] + do + if [ "${f}" -nt "${make}" ] + then statusmsg "${make} outdated" \ "(older than ${f}), needs building." do_rebuildmake=true @@ -1795,12 +1870,14 @@ rebuildmake() fi # Build bootstrap ${toolprefix}make if needed. - if ! ${do_rebuildmake}; then + if ! ${do_rebuildmake} + then return fi # Silent configure with MAKEVERBOSE==0 - if [ ${MAKEVERBOSE:-2} -eq 0 ]; then + if [ ${MAKEVERBOSE:-2} -eq 0 ] + then configure_args=--silent fi @@ -1810,7 +1887,8 @@ rebuildmake() CFLAGS="${HOST_CFLAGS--O}" LDFLAGS="${HOST_LDFLAGS}" \ ${HOST_SH} "${TOP}/tools/make/configure" ${configure_args} || ( cp ${tmpdir}/config.log ${tmpdir}-config.log - bomb "Configure of ${toolprefix}make failed, see ${tmpdir}-config.log for details" ) + bomb "Configure of ${toolprefix}make failed," \ + "see ${tmpdir}-config.log for details" ) ${runcmd} ${HOST_SH} buildmake.sh || bomb "Build of ${toolprefix}make failed" make="${tmpdir}/${toolprefix}make" @@ -1835,10 +1913,12 @@ validatemakeparams() # else if ./mk.conf exists, then set MAKECONF to that, # else use the default from share/mk/bsd.own.mk (/etc/mk.conf). # - if [ -n "${MAKECONF+1}" ]; then + if [ -n "${MAKECONF+1}" ] + then setmakeenv MAKECONF "${MAKECONF}" statusmsg2 "getenv MAKECONF:" "${MAKECONF}" - elif [ -f "${TOP}/mk.conf" ]; then + elif [ -f "${TOP}/mk.conf" ] + then setmakeenv MAKECONF "${TOP}/mk.conf" statusmsg2 "mk.conf MAKECONF:" "${MAKECONF}" else @@ -1846,9 +1926,11 @@ validatemakeparams() setmakeenv MAKECONF "${MAKECONF}" statusmsg2 "share/mk MAKECONF:" "${MAKECONF}" fi - if [ -z "${MAKECONF}" ]; then + if [ -z "${MAKECONF}" ] + then bomb "MAKECONF must not be empty" - elif [ -e "${MAKECONF}" ]; then + elif [ -e "${MAKECONF}" ] + then statusmsg2 "MAKECONF file:" "${MAKECONF}" else statusmsg2 "MAKECONF file:" "${MAKECONF} (File not found)" @@ -1864,34 +1946,39 @@ validatemakeparams() # Non-root should always use either the -U or -E flag. # - if ! ${do_expertmode} && \ - [ "$id_u" -ne 0 ] && \ - [ "${MKUNPRIVED}" = "no" ] ; then + if ! ${do_expertmode} && [ "$id_u" -ne 0 ] && [ "${MKUNPRIVED}" = no ] + then bomb "-U or -E must be set for build as an unprivileged user" fi - if [ "${runcmd}" = "echo" ]; then + if [ "${runcmd}" = echo ] + then TOOLCHAIN_MISSING=no - EXTERNAL_TOOLCHAIN="" + EXTERNAL_TOOLCHAIN= else TOOLCHAIN_MISSING=$(bomb_getmakevar TOOLCHAIN_MISSING) EXTERNAL_TOOLCHAIN=$(bomb_getmakevar EXTERNAL_TOOLCHAIN) fi - if [ "${TOOLCHAIN_MISSING}" = "yes" ] && \ - [ -z "${EXTERNAL_TOOLCHAIN}" ]; then - ${runcmd} echo "ERROR: build.sh (in-tree cross-toolchain) is not yet available for" + if [ "${TOOLCHAIN_MISSING}" = yes ] && [ -z "${EXTERNAL_TOOLCHAIN}" ] + then + ${runcmd} echo "ERROR: build.sh (in-tree cross-toolchain)" \ + "is not yet available for" ${runcmd} echo " MACHINE: ${MACHINE}" ${runcmd} echo " MACHINE_ARCH: ${MACHINE_ARCH}" ${runcmd} echo "" - ${runcmd} echo "All builds for this platform should be done via a traditional make" - ${runcmd} echo "If you wish to use an external cross-toolchain, set" - ${runcmd} echo " EXTERNAL_TOOLCHAIN=<path to toolchain root>" + ${runcmd} echo "All builds for this platform should be done" \ + "via a traditional make" + ${runcmd} echo "If you wish to use an external" \ + "cross-toolchain, set" + ${runcmd} echo " EXTERNAL_TOOLCHAIN=<path to" \ + "toolchain root>" ${runcmd} echo "in either the environment or mk.conf and rerun" ${runcmd} echo " ${progname} $*" exit 1 fi - if [ "${MKOBJDIRS}" != "no" ]; then + if [ "${MKOBJDIRS}" != no ] + then # Create the top-level object directory. # # "make obj NOSUBDIR=" can handle most cases, but it @@ -1903,31 +1990,35 @@ validatemakeparams() # could be handled either way, but we choose to handle # it similarly to MAKEOBJDIRPREFIX. # - if [ -n "${TOP_obj}" ]; then + if [ -n "${TOP_obj}" ] + then # It must have been set by the "-M" or "-O" # command line options, so there's no need to # use getmakevar : - elif [ -n "$MAKEOBJDIRPREFIX" ]; then + elif [ -n "$MAKEOBJDIRPREFIX" ] + then TOP_obj="$(getmakevar MAKEOBJDIRPREFIX)${TOP}" - elif [ -n "$MAKEOBJDIR" ]; then + elif [ -n "$MAKEOBJDIR" ] + then TOP_obj="$(getmakevar MAKEOBJDIR)" fi - if [ -n "$TOP_obj" ]; then - ${runcmd} mkdir -p "${TOP_obj}" || - bomb "Can't create top level object directory" \ - "${TOP_obj}" + if [ -n "$TOP_obj" ] + then + ${runcmd} mkdir -p "${TOP_obj}" || + bomb "Can't create top level object directory" \ + "${TOP_obj}" else - ${runcmd} "${make}" -m ${TOP}/share/mk obj NOSUBDIR= || + ${runcmd} "${make}" -m "${TOP}/share/mk" obj NOSUBDIR= || bomb "Can't create top level object directory" \ - "using make obj" + "using make obj" fi # make obj in tools to ensure that the objdir for "tools" # is available. # ${runcmd} cd tools - ${runcmd} "${make}" -m ${TOP}/share/mk obj NOSUBDIR= || + ${runcmd} "${make}" -m "${TOP}/share/mk" obj NOSUBDIR= || bomb "Failed to make obj in tools" ${runcmd} cd "${TOP}" fi @@ -1942,7 +2033,8 @@ validatemakeparams() do eval oldval=\"\$${var}\" newval="$(getmakevar $var)" - if ! $do_expertmode; then + if ! $do_expertmode + then : ${_SRC_TOP_OBJ_:=$(getmakevar _SRC_TOP_OBJ_)} case "$var" in DESTDIR) @@ -1955,9 +2047,10 @@ validatemakeparams() ;; esac fi - if [ -n "$oldval" ] && [ "$oldval" != "$newval" ]; then + if [ -n "$oldval" ] && [ "$oldval" != "$newval" ] + then bomb "Value of ${var} has changed" \ - "(was \"${oldval}\", now \"${newval}\")" + "(was \"${oldval}\", now \"${newval}\")" fi eval ${var}=\"\${newval}\" eval export ${var} @@ -1969,29 +2062,36 @@ validatemakeparams() # Check validity of TOOLDIR and DESTDIR. # - if [ -z "${TOOLDIR}" ] || [ "${TOOLDIR}" = "/" ]; then + if [ -z "${TOOLDIR}" ] || [ "${TOOLDIR}" = / ] + then bomb "TOOLDIR '${TOOLDIR}' invalid" fi removedirs="${TOOLDIR}" - if [ -z "${DESTDIR}" ] || [ "${DESTDIR}" = "/" ]; then - if ${do_distribution} || ${do_release} || \ - [ "${uname_s}" != "NetBSD" ] || \ - [ "${uname_m}" != "${MACHINE}" ]; then - bomb "DESTDIR must != / for cross builds, or ${progname} 'distribution' or 'release'" + if [ -z "${DESTDIR}" ] || [ "${DESTDIR}" = / ] + then + if ${do_distribution} || ${do_release} || + [ "${uname_s}" != NetBSD ] || + [ "${uname_m}" != "${MACHINE}" ] + then + bomb "DESTDIR must != / for cross builds," \ + "or ${progname} 'distribution' or 'release'" fi - if ! ${do_expertmode}; then + if ! ${do_expertmode} + then bomb "DESTDIR must != / for non -E (expert) builds" fi statusmsg "WARNING: Building to /, in expert mode." - statusmsg " This may cause your system to break! Reasons include:" - statusmsg " - your kernel is not up to date" - statusmsg " - the libraries or toolchain have changed" + statusmsg " This may cause your system to break!" + statusmsg " Reasons include:" + statusmsg " - your kernel is not up to date" + statusmsg " - the libraries or toolchain have changed" statusmsg " YOU HAVE BEEN WARNED!" else removedirs="${removedirs} ${DESTDIR}" fi - if ${do_releasekernel} && [ -z "${RELEASEDIR}" ]; then + if ${do_releasekernel} && [ -z "${RELEASEDIR}" ] + then bomb "Must set RELEASEDIR with 'releasekernel=...'" fi @@ -2005,12 +2105,15 @@ validatemakeparams() # DESTDIR is about to be removed ;; *) - if [ -e "${DESTDIR}/METALOG" ] && \ - [ "${MKUNPRIVED}" = "no" ] ; then - if $do_expertmode; then + if [ -e "${DESTDIR}/METALOG" ] && + [ "${MKUNPRIVED}" = no ] + then + if $do_expertmode + then warning "A previous build.sh run specified -U" else - bomb "A previous build.sh run specified -U; you must specify it again now" + bomb "A previous build.sh run specified -U;" \ + "you must specify it again now" fi fi ;; @@ -2021,9 +2124,12 @@ validatemakeparams() # If release operation is specified with live-image or install-image, # the release op should be performed with -U for later image ops. # - if ${do_release} && ( ${do_live_image} || ${do_install_image} ) && \ - [ "${MKUNPRIVED}" = "no" ] ; then - bomb "-U must be specified on building release to create images later" + if ${do_release} && + { ${do_live_image} || ${do_install_image} ; } && + [ "${MKUNPRIVED}" = no ] + then + bomb "-U must be specified on building release" \ + "to create images later" fi } @@ -2032,8 +2138,10 @@ createmakewrapper() { # Remove the target directories. # - if ${do_removedirs}; then - for f in ${removedirs}; do + if ${do_removedirs} + then + for f in ${removedirs} + do statusmsg "Removing ${f}" ${runcmd} rm -r -f "${f}" done @@ -2051,15 +2159,16 @@ createmakewrapper() # value of TOOLDIR might be different from the value guessed # before the top level obj dir was created. # - if ! ${done_rebuildmake} && \ - ( [ ! -x "$make" ] || [ "$make" != "$(print_tooldir_make)" ] ) + if ! ${done_rebuildmake} && + { ! [ -x "$make" ] || [ "$make" != "$(print_tooldir_make)" ] ; } then rebuildmake fi # Install ${toolprefix}make if it was built. # - if ${done_rebuildmake}; then + if ${done_rebuildmake} + then ${runcmd} rm -f "${TOOLDIR}/bin/${toolprefix}make" ${runcmd} cp "${make}" "${TOOLDIR}/bin/${toolprefix}make" || bomb "Failed to install \$TOOLDIR/bin/${toolprefix}make" @@ -2070,13 +2179,16 @@ createmakewrapper() # Build a ${toolprefix}make wrapper script, usable by hand as # well as by build.sh. # - if [ -z "${makewrapper}" ]; then - makewrapper="${TOOLDIR}/bin/${toolprefix}make-${makewrappermachine:-${MACHINE}}" + if [ -z "${makewrapper}" ] + then + makewrapper="${TOOLDIR}/bin/${toolprefix}make" + makewrapper="${makewrapper}-${makewrappermachine:-${MACHINE}}" [ -z "${BUILDID}" ] || makewrapper="${makewrapper}-${BUILDID}" fi ${runcmd} rm -f "${makewrapper}" - if [ "${runcmd}" = "echo" ]; then + if [ "${runcmd}" = echo ] + then echo 'cat <<EOF >'${makewrapper} makewrapout= else @@ -2092,18 +2204,25 @@ createmakewrapper() eval cat <<EOF ${makewrapout} #! ${HOST_SH} # Set proper variables to allow easy "make" building of a NetBSD subtree. -# Generated from: \$NetBSD: build.sh,v 1.385 2024/12/20 15:56:45 riastradh Exp $ +# Generated from: \$NetBSD: build.sh,v 1.386 2024/12/20 22:24:20 kre Exp $ # with these arguments: ${_args} # EOF { - sorted_vars="$(for var in ${makeenv}; do echo "${var}" ; done \ - | sort -u )" - for var in ${sorted_vars}; do + sorted_vars=$( + for var in ${makeenv} + do + echo "${var}" + done | + sort -u + ) + for var in ${sorted_vars} + do eval val=\"\${${var}}\" eval is_set=\"\${${var}+set}\" - if [ -z "${is_set}" ]; then + if [ -z "${is_set}" ] + then echo "unset ${var}" else qval="$(shell_quote "${val}")" @@ -2111,20 +2230,20 @@ EOF fi done - cat <<EOF + cat <<-EOF -exec "\${TOOLDIR}/bin/${toolprefix}make" \${1+"\$@"} -EOF + exec "\${TOOLDIR}/bin/${toolprefix}make" \${1+"\$@"} + EOF } | eval cat "${makewrapout}" - [ "${runcmd}" = "echo" ] && echo EOF + [ "${runcmd}" = echo ] && echo EOF ${runcmd} chmod +x "${makewrapper}" statusmsg2 "Updated makewrapper:" "${makewrapper}" } make_in_dir() { - local dir="$1" - local op="$2" + local dir=$1 + local op=$2 ${runcmd} cd "${dir}" || bomb "Failed to cd to \"${dir}\"" ${runcmd} "${makewrapper}" ${parallel} ${op} || @@ -2135,11 +2254,13 @@ make_in_dir() buildtools() { - if [ "${MKOBJDIRS}" != "no" ]; then + if [ "${MKOBJDIRS}" != no ] + then ${runcmd} "${makewrapper}" ${parallel} obj-tools || bomb "Failed to make obj-tools" fi - if [ "${MKUPDATE}" = "no" ]; then + if [ "${MKUPDATE}" = no ] + then make_in_dir tools cleandir fi make_in_dir tools build_install @@ -2148,11 +2269,13 @@ buildtools() buildlibs() { - if [ "${MKOBJDIRS}" != "no" ]; then + if [ "${MKOBJDIRS}" != no ] + then ${runcmd} "${makewrapper}" ${parallel} obj || bomb "Failed to make obj" fi - if [ "${MKUPDATE}" = "no" ]; then + if [ "${MKUPDATE}" = no ] + then make_in_dir lib cleandir fi make_in_dir . do-distrib-dirs @@ -2163,8 +2286,9 @@ buildlibs() getkernelconf() { - kernelconf="$1" - if [ "${MKOBJDIRS}" != "no" ]; then + kernelconf=$1 + if [ "${MKOBJDIRS}" != no ] + then # The correct value of KERNOBJDIR might # depend on a prior "make obj" in # ${KERNSRCDIR}/${KERNARCHDIR}/compile. @@ -2173,24 +2297,24 @@ getkernelconf() KERNARCHDIR="$(getmakevar KERNARCHDIR)" make_in_dir "${KERNSRCDIR}/${KERNARCHDIR}/compile" obj fi - KERNCONFDIR="$(getmakevar KERNCONFDIR)" - KERNOBJDIR="$(getmakevar KERNOBJDIR)" + KERNCONFDIR=$(getmakevar KERNCONFDIR) + KERNOBJDIR=$(getmakevar KERNOBJDIR) case "${kernelconf}" in */*) - kernelconfpath="${kernelconf}" - kernelconfname="${kernelconf##*/}" + kernelconfpath=${kernelconf} + kernelconfname=${kernelconf##*/} ;; *) - kernelconfpath="${KERNCONFDIR}/${kernelconf}" - kernelconfname="${kernelconf}" + kernelconfpath=${KERNCONFDIR}/${kernelconf} + kernelconfname=${kernelconf} ;; esac - kernelbuildpath="${KERNOBJDIR}/${kernelconfname}" + kernelbuildpath=${KERNOBJDIR}/${kernelconfname} } diskimage() { - ARG="$(echo $1 | tr '[:lower:]' '[:upper:]')" + ARG="$(echo "$1" | tr '[:lower:]' '[:upper:]')" [ -f "${DESTDIR}/etc/mtree/set.base" ] || bomb "The release binaries must be built first" kerneldir="${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/kernel" @@ -2202,7 +2326,8 @@ diskimage() buildkernel() { - if ! ${do_tools} && ! ${buildkernelwarned:-false}; then + if ! ${do_tools} && ! ${buildkernelwarned:-false} + then # Building tools every time we build a kernel is clearly # unnecessary. We could try to figure out whether rebuilding # the tools is necessary this time, but it doesn't seem worth @@ -2217,11 +2342,13 @@ buildkernel() statusmsg2 "Build directory:" "${kernelbuildpath}" ${runcmd} mkdir -p "${kernelbuildpath}" || bomb "Cannot mkdir: ${kernelbuildpath}" - if [ "${MKUPDATE}" = "no" ]; then + if [ "${MKUPDATE}" = no ] + then make_in_dir "${kernelbuildpath}" cleandir fi - [ -x "${TOOLDIR}/bin/${toolprefix}config" ] \ - || bomb "${TOOLDIR}/bin/${toolprefix}config does not exist. You need to \"$0 tools\" first" + [ -x "${TOOLDIR}/bin/${toolprefix}config" ] || + bomb "${TOOLDIR}/bin/${toolprefix}config does not exist." \ + "You need to \"$0 tools\" first" CONFIGOPTS=$(getmakevar CONFIGOPTS) ${runcmd} "${TOOLDIR}/bin/${toolprefix}config" ${CONFIGOPTS} \ -b "${kernelbuildpath}" -s "${TOP}/sys" ${configopts} \ @@ -2230,11 +2357,13 @@ buildkernel() make_in_dir "${kernelbuildpath}" depend make_in_dir "${kernelbuildpath}" all - if [ "${runcmd}" != "echo" ]; then + if [ "${runcmd}" != echo ] + then statusmsg "Kernels built from ${kernelconf}:" kernlist=$(awk '$1 == "config" { print $2 }' ${kernelconfpath}) - for kern in ${kernlist:-netbsd}; do - [ -f "${kernelbuildpath}/${kern}" ] && \ + for kern in ${kernlist:-netbsd} + do + [ -f "${kernelbuildpath}/${kern}" ] && echo " ${kernelbuildpath}/${kern}" done | tee -a "${results}" fi @@ -2246,12 +2375,14 @@ releasekernel() kernelreldir="${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/kernel" ${runcmd} mkdir -p "${kernelreldir}" kernlist=$(awk '$1 == "config" { print $2 }' ${kernelconfpath}) - for kern in ${kernlist:-netbsd}; do + for kern in ${kernlist:-netbsd} + do builtkern="${kernelbuildpath}/${kern}" [ -f "${builtkern}" ] || continue releasekern="${kernelreldir}/${kern}-${kernelconfname}.gz" statusmsg2 "Kernel copy:" "${releasekern}" - if [ "${runcmd}" = "echo" ]; then + if [ "${runcmd}" = echo ] + then echo "gzip -c -9 < ${builtkern} > ${releasekern}" else gzip -c -9 < "${builtkern}" > "${releasekern}" @@ -2262,7 +2393,8 @@ releasekernel() buildkernels() { allkernels=$( runcmd= make_in_dir etc '-V ${ALL_KERNELS}' ) - for k in $allkernels; do + for k in $allkernels + do buildkernel "${k}" done } @@ -2270,7 +2402,8 @@ buildkernels() buildmodules() { setmakeenv MKBINUTILS no - if ! ${do_tools} && ! ${buildmoduleswarned:-false}; then + if ! ${do_tools} && ! ${buildmoduleswarned:-false} + then # Building tools every time we build modules is clearly # unnecessary as well as a kernel. # @@ -2279,31 +2412,38 @@ buildmodules() fi statusmsg "Building kernel modules for NetBSD/${MACHINE} ${DISTRIBVER}" - if [ "${MKOBJDIRS}" != "no" ]; then + if [ "${MKOBJDIRS}" != no ] + then make_in_dir sys/modules obj fi - if [ "${MKUPDATE}" = "no" ]; then + if [ "${MKUPDATE}" = no ] + then make_in_dir sys/modules cleandir fi make_in_dir sys/modules dependall make_in_dir sys/modules install - statusmsg "Successful build of kernel modules for NetBSD/${MACHINE} ${DISTRIBVER}" + statusmsg "Successful build of kernel modules for" \ + "NetBSD/${MACHINE} ${DISTRIBVER}" } builddtb() { - statusmsg "Building devicetree blobs for NetBSD/${MACHINE} ${DISTRIBVER}" - if [ "${MKOBJDIRS}" != "no" ]; then + statusmsg "Building devicetree blobs for" \ + "NetBSD/${MACHINE} ${DISTRIBVER}" + if [ "${MKOBJDIRS}" != no ] + then make_in_dir sys/dtb obj fi - if [ "${MKUPDATE}" = "no" ]; then + if [ "${MKUPDATE}" = no ] + then make_in_dir sys/dtb cleandir fi make_in_dir sys/dtb dependall make_in_dir sys/dtb install - statusmsg "Successful build of devicetree blobs for NetBSD/${MACHINE} ${DISTRIBVER}" + statusmsg "Successful build of devicetree blobs for" \ + "NetBSD/${MACHINE} ${DISTRIBVER}" } buildpkg() @@ -2332,25 +2472,35 @@ buildpkg() makejobsarg="--make-jobs ${parallel#-j }" makejobsvar="MAKE_JOBS=${parallel#-j }" ;; - *) makejobsarg="" - makejobsvar="" + *) makejobsarg= + makejobsvar= ;; esac - if [ "${MAKEVERBOSE}" -eq 0 ]; then + if [ "${MAKEVERBOSE}" -eq 0 ] + then quiet="--quiet" else - quiet="" + quiet= fi # Derived from pkgsrc/mk/bsd.prefs.mk rev. 1.451. opsys_version=$(echo "${DISTRIBVER}" | - awk -F. '{major=int($1); minor=int($2); if (minor>=100) minor=99; patch=int($3); if (patch>=100) patch=99; printf "%02d%02d%02d", major, minor, patch}') + awk -F. '{ + major=int($1) + minor=int($2) + if (minor>=100) minor=99 + patch=int($3) + if (patch>=100) patch=99 + printf "%02d%02d%02d", major, minor, patch + }' + ) # Bootstrap pkgsrc if needed. # # XXX Redo this if it's out-of-date, not just if it's missing. - if ! [ -x "${pkgroot}/pkg/bin/bmake" ]; then + if ! [ -x "${pkgroot}/pkg/bin/bmake" ] + then statusmsg "Bootstrapping pkgsrc" cat >"${pkgroot}/mk.conf-fragment" <<EOF @@ -2392,22 +2542,29 @@ EOF # XXX Set --abi for mips and whatever else needs it? # XXX Unprivileged native tools, privileged cross. - (cd "${PKGSRCDIR}" && clearmakeenv && ./bootstrap/bootstrap \ - ${makejobsarg} \ - --mk-fragment "${pkgroot}/mk.conf-fragment" \ - --prefix "${pkgroot}/pkg" \ - ${quiet} \ - --unprivileged \ - --workdir "${pkgroot}/bootwork") \ - || bomb "Failed to bootstrap pkgsrc" + ( + cd "${PKGSRCDIR}" && + clearmakeenv && + ./bootstrap/bootstrap \ + ${makejobsarg} \ + --mk-fragment "${pkgroot}/mk.conf-fragment" \ + --prefix "${pkgroot}/pkg" \ + ${quiet} \ + --unprivileged \ + --workdir "${pkgroot}/bootwork" + ) || + bomb "Failed to bootstrap pkgsrc" fi # Build the package. - (cd "${PKGSRCDIR}/${catpkg}" && clearmakeenv && \ + ( + cd "${PKGSRCDIR}/${catpkg}" && + clearmakeenv && "${pkgroot}/pkg/bin/bmake" package \ USE_CROSS_COMPILE=yes \ - ${makejobsvar}) \ - || bomb "Failed to build ${catpkg}" + ${makejobsvar} + ) || + bomb "Failed to build ${catpkg}" } installmodules() @@ -2472,34 +2629,40 @@ RUMP_LIBSETS=" dorump() { - local doclean="" - local doobjs="" + local doclean= + local doobjs= export RUMPKERN_ONLY=1 # create obj and distrib dirs - if [ "${MKOBJDIRS}" != "no" ]; then + if [ "${MKOBJDIRS}" != no ] + then make_in_dir "${NETBSDSRCDIR}/etc/mtree" obj make_in_dir "${NETBSDSRCDIR}/sys/rump" obj fi ${runcmd} "${makewrapper}" ${parallel} do-distrib-dirs \ || bomb "Could not create distrib-dirs" - [ "${MKUPDATE}" = "no" ] && doclean="cleandir" + [ "${MKUPDATE}" = no ] && doclean="cleandir" targlist="${doclean} ${doobjs} dependall install" + # optimize: for test we build only static libs (3x test speedup) - if [ "${1}" = "rumptest" ] ; then + if [ "${1}" = rumptest ] + then setmakeenv NOPIC 1 setmakeenv NOPROFILE 1 fi - for cmd in ${targlist} ; do + + for cmd in ${targlist} + do make_in_dir "${NETBSDSRCDIR}/sys/rump" ${cmd} done # if we just wanted to build & install rump, we're done - [ "${1}" != "rumptest" ] && return + [ "${1}" != rumptest ] && return + + ${runcmd} cd "${NETBSDSRCDIR}/sys/rump/librump/rumpkern" || + bomb "cd to rumpkern failed" - ${runcmd} cd "${NETBSDSRCDIR}/sys/rump/librump/rumpkern" \ - || bomb "cd to rumpkern failed" md_quirks=`${runcmd} "${makewrapper}" -V '${_SYMQUIRK}'` # one little, two little, three little backslashes ... md_quirks="$(echo ${md_quirks} | sed 's,\\,\\\\,g'";s/'//g" )" @@ -2508,10 +2671,12 @@ dorump() local oIFS="${IFS}" IFS="," - for set in ${RUMP_LIBSETS} ; do + for set in ${RUMP_LIBSETS} + do IFS="${oIFS}" ${runcmd} ${tool_ld} -nostdlib -L${DESTDIR}/usr/lib \ - -static --whole-archive ${set} --no-whole-archive -lpthread -lc 2>&1 -o /tmp/rumptest.$$ | \ + -static --whole-archive ${set} --no-whole-archive \ + -lpthread -lc 2>&1 -o /tmp/rumptest.$$ | awk -v quirks="${md_quirks}" ' /undefined reference/ && !/more undefined references.*follow/{ @@ -2540,15 +2705,18 @@ setup_mkrepro() { local quiet="$1" - if [ ${MKREPRO-no} != "yes" ]; then + if [ "${MKREPRO-no}" != yes ] + then return fi - if [ ${MKREPRO_TIMESTAMP-0} -ne 0 ]; then + if [ "${MKREPRO_TIMESTAMP-0}" -ne 0 ] + then return fi local dirs=${NETBSDSRCDIR-/usr/src}/ - if [ ${MKX11-no} = "yes" ]; then + if [ "${MKX11-no}" = yes ] + then dirs="$dirs ${X11SRCDIR-/usr/xsrc}/" fi @@ -2558,60 +2726,87 @@ setup_mkrepro() local t local tag local vcs - for d in ${dirs}; do - if [ -d "${d}CVS" ]; then + for d in ${dirs} + do + if [ -d "${d}CVS" ] + then local cvslatest=$(print_tooldir_program cvslatest) - if [ ! -x "${cvslatest}" ]; then + if ! [ -x "${cvslatest}" ] + then buildtools fi local nbdate=$(print_tooldir_program date) local cvslatestflags= - if ${do_expertmode}; then + if ${do_expertmode} + then cvslatestflags=-i fi - t=$("${cvslatest}" ${cvslatestflags} "${d}") - if [ -f "${d}CVS/Tag" ]; then + t=$("${cvslatest}" ${cvslatestflags} "${d}") || + bomb "${cvslatest} failed" + if [ -f "${d}CVS/Tag" ] + then tag=$( sed 's/^T//' < "${d}CVS/Tag" ) else tag=HEAD fi - NETBSD_REVISIONID="${tag}-"$(${nbdate} -u -r ${t} '+%Y%m%d%H%M%S') + NETBSD_REVISIONID="${tag}-$( + ${nbdate} -u -r ${t} '+%Y%m%d%H%M%S')" vcs=cvs - elif [ -d "${d}.git" -o -f "${d}.git" ]; then - t=$(cd "${d}" && git log -1 --format=%ct) - NETBSD_REVISIONID=$(cd "${d}" && git log -1 --format=%H) + elif [ -d "${d}.git" ] || [ -f "${d}.git" ] + then + t=$(cd "${d}" && git log -1 --format=%ct) || + bomb "git log %ct failed" + NETBSD_REVISIONID=$( + cd "${d}" && git log -1 --format=%H) || + bomb "git log %H failed" vcs=git - elif [ -d "${d}.hg" ]; then - t=$(hg --repo "$d" log -r . --template '{date.unixtime}\n') - NETBSD_REVISIONID=$(hg --repo "$d" identify --template '{id}\n') + elif [ -d "${d}.hg" ] + then + t=$(hg --repo "$d" \ + log -r . --template '{date.unixtime}\n') || + bomb "hg log failed" + NETBSD_REVISIONID=$(hg --repo "$d" \ + identify --template '{id}\n') || + bomb "hg identify failed" vcs=hg - elif [ -f "${d}.hg_archival.txt" ]; then - local stat=$(print_tooldir_program stat) - if [ ! -x "${stat}" ]; then + elif [ -f "${d}.hg_archival.txt" ] + then + local stat + stat=$(print_tooldir_program stat) || + bomb "print_tooldir_program stat failed" + if ! [ -x "${stat}" ] + then buildtools fi - t=$("${stat}" -t '%s' -f '%m' "${d}.hg_archival.txt") - NETBSD_REVISIONID=$(awk '/^node:/ { print $2 }' < "${d}.hg_archival.txt") + t=$("${stat}" -t '%s' -f '%m' "${d}.hg_archival.txt") || + bomb "stat failed on ${d}.hg_archival.txt" + NETBSD_REVISIONID=$( + awk '/^node:/ { print $2 }' <"${d}.hg_archival.txt" + ) || bomb \ + "awk failed to find node: in ${d}.hg_archival.txt" vcs=hg else bomb "Cannot determine VCS for '$d'" fi - if [ -z "$t" ]; then + if [ -z "$t" ] + then bomb "Failed to get timestamp for vcs=$vcs in '$d'" fi #echo "latest $d $vcs $t" - if [ "$t" -gt "$MKREPRO_TIMESTAMP" ]; then + if [ "$t" -gt "$MKREPRO_TIMESTAMP" ] + then MKREPRO_TIMESTAMP="$t" fi done [ "${MKREPRO_TIMESTAMP}" -ne 0 ] || bomb "Failed to compute timestamp" - if [ -z "${quiet}" ]; then + if [ -z "${quiet}" ] + then statusmsg2 "MKREPRO_TIMESTAMP" \ "$(repro_date "${MKREPRO_TIMESTAMP}")" fi @@ -2621,7 +2816,7 @@ setup_mkrepro() main() { initdefaults - _args=$@ + _args=$* parseoptions "$@" sanitycheck @@ -2634,18 +2829,22 @@ main() statusmsg2 "MACHINE_ARCH:" "${MACHINE_ARCH}" statusmsg2 "Build platform:" "${uname_s} ${uname_r} ${uname_m}" statusmsg2 "HOST_SH:" "${HOST_SH}" - if [ -n "${BUILDID}" ]; then - statusmsg2 "BUILDID:" "${BUILDID}" + if [ -n "${BUILDID}" ] + then + statusmsg2 BUILDID: "${BUILDID}" fi - if [ -n "${BUILDINFO}" ]; then - printf "%b\n" "${BUILDINFO}" | \ - while read -r line ; do + if [ -n "${BUILDINFO}" ] + then + printf "%b\n" "${BUILDINFO}" | + while read -r line + do [ -s "${line}" ] && continue - statusmsg2 "BUILDINFO:" "${line}" + statusmsg2 BUILDINFO: "${line}" done fi - if [ -n "${MAKECONF+1}" ] && [ -z "${MAKECONF}" ]; then + if [ -n "${MAKECONF+1}" ] && [ -z "${MAKECONF}" ] + then bomb "MAKECONF must not be empty" fi @@ -2656,7 +2855,8 @@ main() # Perform the operations. # - for op in ${operations}; do + for op in ${operations} + do case "${op}" in makewrapper) @@ -2693,16 +2893,18 @@ main() iso-image|iso-image-source) ${runcmd} "${makewrapper}" ${parallel} \ CDEXTRA="$CDEXTRA" ${op} || - bomb "Failed to make ${op}" + bomb "Failed to make ${op}" statusmsg "Successful make ${op}" ;; live-image|install-image) # install-image and live-image require mtree spec files - # built with MKUNPRIVED. Assume MKUNPRIVED build has been - # performed if METALOG file is created in DESTDIR. - if [ ! -e "${DESTDIR}/METALOG" ] ; then - bomb "The release binaries must have been built with -U to create images" + # built with MKUNPRIVED. Assume MKUNPRIVED build has + # been performed if METALOG file is created in DESTDIR. + if [ ! -e "${DESTDIR}/METALOG" ] + then + bomb "The release binaries must have been" \ + "built with -U to create images" fi ${runcmd} "${makewrapper}" ${parallel} ${op} || bomb "Failed to make ${op}" @@ -2741,7 +2943,8 @@ main() pkg=*) arg=${op#*=} - if ! [ -d "$PKGSRCDIR"/"$arg" ]; then + if ! [ -d "${PKGSRCDIR}/${arg}" ] + then bomb "no such package ${arg}" fi buildpkg "${arg}" @@ -2749,9 +2952,11 @@ main() installmodules=*) arg=${op#*=} - if [ "${arg}" = "/" ] && \ - ( [ "${uname_s}" != "NetBSD" ] || \ - [ "${uname_m}" != "${MACHINE}" ] ); then + if [ "${arg}" = / ] && { + [ "${uname_s}" != NetBSD ] || + [ "${uname_m}" != "${MACHINE}" ] + } + then bomb "'${op}' must != / for cross builds" fi installmodules "${arg}" @@ -2759,9 +2964,11 @@ main() install=*) arg=${op#*=} - if [ "${arg}" = "/" ] && \ - ( [ "${uname_s}" != "NetBSD" ] || \ - [ "${uname_m}" != "${MACHINE}" ] ); then + if [ "${arg}" = / ] && { + [ "${uname_s}" != NetBSD ] || + [ "${uname_m}" != "${MACHINE}" ] + } + then bomb "'${op}' must != / for cross builds" fi installworld "${arg}" @@ -2789,7 +2996,8 @@ main() done statusmsg2 "${progname} ended:" "$(date)" - if [ -s "${results}" ]; then + if [ -s "${results}" ] + then echo "===> Summary of results:" sed -e 's/^===>//;s/^/ /' "${results}" echo "===> ."