bin/mdw-build: Force use of `bash' to allow file descriptors >= 10.
[profile] / bin / mdw-build
index 09f99d5..0f3f7a4 100755 (executable)
@@ -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
 
@@ -241,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
@@ -351,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
@@ -381,7 +406,7 @@ esac
 cat >find-distdir.mk <<'EOF'
 include Makefile
 print-distdir:
-       @echo >&$(fd) $(distdir)
+       @bash -c 'echo >&$(fd) $(distdir)'
 EOF
 assign distdir \
   $({ $make -f find-distdir.mk print-distdir fd=$t >/dev/null 2>&1; } {t}>&1)
@@ -443,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 ;;