X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/be2a23145689a47546e3ccad9f6abe60d7f55bcd..f173a9c272a79ac77dc896ab31cf445c48363956:/bin/mdw-build diff --git a/bin/mdw-build b/bin/mdw-build index 10557a8..6c034b8 100755 --- a/bin/mdw-build +++ b/bin/mdw-build @@ -77,13 +77,14 @@ default_depends () { } : ${checkout=yes} ${checkoutrev=HEAD} : ${build=test} -: ${setup=yes} ${setupcmd=mdw-setup} +: ${setup=yes} ${setupcmd=!guess} : ${distcheck=yes} : ${debian=yes} : ${clean=yes} : ${vpath=yes} : ${native=yes} : ${make=make} +: ${test=yes} default_depends sbuild sbuildsrv default_depends sign signkey default_depends upload uploadpath @@ -112,6 +113,7 @@ Build options: [no]vpath [no]sbuild[=SERVER] [no]sign[=KEYID] + [no]test [no]native make=MAKE EOF @@ -143,7 +145,7 @@ for opt; do checkout=*) checkout=yes checkoutrev=${opt#*=} ;; release) build=release ;; norelease) build=test ;; - setup) setup=yes setupcmd=mdw-setup ;; + setup) setup=yes setupcmd=!guess ;; setup=*) setup=yes setupcmd=${opt#*=} ;; upload) maybe_set upload uploadpath ;; upload=*) upload=yes uploadpath=${opt#*=} ;; @@ -155,11 +157,12 @@ for opt; do dput=*) dput=yes dputtarget=${opt#*=} ;; make=*) make=${opt#*=} ;; - distcheck | debian | clean | vpath | native) + distcheck | debian | clean | vpath | native | test) eval "$opt=yes" ;; nocheckout | nosetup | nodistcheck | nodebian | \ - noupload | nodput | noclean | novpath | nonative | nosbuild | nosign) + noupload | nodput | noclean | novpath | nonative | notest | \ + nosbuild | nosign ) eval "${opt#no}=no" ;; *) @@ -175,6 +178,7 @@ set -- $DEB_BUILD_OPTIONS for opt; do case "$opt" in parallel=*) jobs=${opt#*=} ;; + nocheck) test=no ;; esac done @@ -188,13 +192,11 @@ case $jobs in 1) ;; *) makeopts="$makeopts -j$jobs" ;; esac ## ## 0 -- original stdin (never touched) ## 1, 2 -- stdout, stderr, redirected to 3 while running comamnds -## log -- original stderr (verbose), or logfile (quiet); captures command -## output -## diag -- null (verbose), or logfile (quiet); primary diagnostic output +## log -- logfile and original stderr (verbose), or logfile only (quiet); +## captures command output +## diag -- logfile; primary diagnostic output ## term -- orginal stderr; secondary diagnostic output (with colours) -exec {log}>&2 {diag}>/dev/null {term}>&2 - notify () { colour=$1 message=$2 echo $message >&$diag @@ -243,6 +245,17 @@ yesno () { ###-------------------------------------------------------------------------- ### Do the building. +## Some preflight checks. +case $test,$build in + no,release) fail "refusing to make release build without testing" ;; +esac +case $test,$distcheck in + no,yes) + info "forcing \`distcheck' off because tsting disabled" + distcheck=no + ;; +esac + ## Find the top-level package directory. while [ ! -f configure.ac -a ! -f configure.in -a \ ! -f .links -a ! -d .git ]; do @@ -253,7 +266,7 @@ while [ ! -f configure.ac -a ! -f configure.in -a \ esac cd .. done -assign toppath $(pwd) +toppath=$(pwd) ## Build any necessary qualifiers. qual= sep=. @@ -263,18 +276,23 @@ case ${SBOX_SESSION_DIR+t},${DEB_BUILD_ARCH+t} in esac ## Construct the output directory. -assign releasepath $toppath/dist-$build$qual +releasepath=$toppath/dist-$build$qual chmod -R +w $releasepath 2>/dev/null || : rm -rf $releasepath 2>/dev/null || : mkdir $releasepath +logfile=$releasepath/mdw-build.log +exec {term}>&2 +exec {diag}>>$logfile || fail "Failed to create log." case $verbose in - no) - exec {log}>&- {diag}>&- - exec {diag}>$releasepath/mdw-build.log {log}>&$diag || - fail "Failed to create log." - ;; + no) exec {log}>&$diag ;; + yes) exec {log}> >(tee -a $logfile >&$term {term}>&- {diag}>&-) ;; esac +## Repeat the earlier assignments for tbe benefit of the logfile. +assign toppath $toppath +assign releasepath $releasepath +assign logfile $logfile + ## Do we have a Git repository? case "$checkout,$setup,$(yesno [ -d $toppath/.git ])" in yes,no,*) @@ -348,6 +366,16 @@ esac ## Maybe refresh the build machinery. case "$setup" in yes) + case $setupcmd in + !guess) + if [ -f .links ]; then setupcmd=mdw-setup + elif [ -x autogen.sh ]; then setupcmd=./autogen.sh + elif [ -x setup ]; then setupcmd=./setup + elif [ -f configure.ac ]; then setupcmd="autoreconf -is" + else setupcmd=mdw-setup + fi + ;; + esac run $setupcmd ;; esac @@ -440,6 +468,13 @@ EOF fi ;; esac + case "$sbuild,$test, $DEB_BUILD_OPTIONS " in + yes,no,*) sbuildargs="-T $sbuildargs" ;; + *" nocheck "*) ;; + no,no,*) + DEB_BUILD_OPTIONS=${DEB_BUILD_OPTIONS+"$DEB_BUILD_OPTIONS nocheck"} + ;; + esac case $sbuild,$build,$sign in yes,*) run mdw-sbuild $sbuildargs ;; no,release,yes) run dpkg-buildpackage -k$signkey ;;