}
: ${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
[no]vpath
[no]sbuild[=SERVER]
[no]sign[=KEYID]
+ [no]test
[no]native
make=MAKE
EOF
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#*=} ;;
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"
;;
*)
for opt; do
case "$opt" in
parallel=*) jobs=${opt#*=} ;;
+ nocheck) test=no ;;
esac
done
##
## 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
###--------------------------------------------------------------------------
### 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
esac
cd ..
done
-assign toppath $(pwd)
-assign srcpath $toppath
+toppath=$(pwd)
## Build any necessary qualifiers.
qual= sep=.
esac
## Construct the output directory.
-assign releasepath $srcpath/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 $srcpath/.git ])" in
+case "$checkout,$setup,$(yesno [ -d $toppath/.git ])" in
yes,no,*)
fail "Inconsistent options: can't check out without setup."
;;
checkout=no gitver=none
;;
yes,yes,yes)
- cd $srcpath
+ cd $toppath
[ "$(git ls-files -m)" = "" ] ||
warn "working tree has uncommitted changes"
;;
esac
## Is there Debian build equipment?
-case "$debian,$(yesno [ -d $srcpath/debian ])" in
+case "$debian,$(yesno [ -d $toppath/debian ])" in
yes,no)
info "No debian directory found."
debian=no debver=none
case "$checkout" in
yes)
cd $releasepath
- run git clone -sn $srcpath/.git _source
+ run git clone -sn $toppath/.git _source
assign srcpath $releasepath/_source
cd $srcpath
run git update-ref refs/heads/mdw-build $checkoutrev ""
run git checkout-index -afu
assign gitversion "$(git describe --abbrev=4)"
;;
+ no)
+ assign srcpath $toppath
+ ;;
esac
## Check the version number.
## 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
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 ;;