bin/mdw-build: Allow overriding the `make' program.
[profile] / bin / mdw-build
index 01b737c..45ca7f8 100755 (executable)
@@ -83,6 +83,7 @@ default_depends () {
 : ${clean=yes}
 : ${vpath=yes}
 : ${native=yes}
+: ${make=make}
 default_depends sbuild sbuildsrv
 default_depends sign signkey
 default_depends upload uploadpath
@@ -96,7 +97,7 @@ prog=${0##*/}
 
 usage () {
   cat <<EOF
-Usage: $prog [-vr] BUILDOPT
+Usage: $prog [-v] BUILDOPT
 
 Build options:
 
@@ -112,12 +113,13 @@ Build options:
   [no]sbuild[=SERVER]
   [no]sign[=KEYID]
   [no]native
+  make=MAKE
 EOF
 }
 
 ## Parse simple options.
 verbose=no
-while getopts "hvr" opt; do
+while getopts "hv" opt; do
   case "$opt" in
     h) usage; exit 0 ;;
     v) verbose=yes ;;
@@ -151,6 +153,7 @@ for opt; do
     sbuild=*)  sbuild=yes sbuildsrv=${opt#*=} ;;
     dput)      maybe_set dput dputtarget ;;
     dput=*)    dput=yes dputtarget=${opt#*=} ;;
+    make=*)    make=${opt#*=} ;;
 
     distcheck | debian | clean | vpath | native)
       eval "$opt=yes"
@@ -289,7 +292,7 @@ case "$debian,$(yesno [ -d $srcpath/debian ])" in
     debver=none
     ;;
   yes,yes)
-    debver=$(dpkg-parsechangelog | sed -n 's/^Version: //p' | tr \~ -)
+    debver=$(dpkg-parsechangelog | sed -n 's/^Version: //p')
     debsrc=$(dpkg-parsechangelog | sed -n 's/^Source: //p')
     debname=$(git config user.name) debemail=$(git config user.email)
     ;;
@@ -302,20 +305,30 @@ case "$checkout" in
     run git clone -sn $srcpath/.git _source
     assign srcpath $releasepath/_source
     cd $srcpath
-    run git checkout -b mdw-build $checkoutrev
-    gitver=$(git describe --abbrev=4)
+    run git update-ref refs/heads/mdw-build $checkoutrev ""
+    run git symbolic-ref HEAD refs/heads/mdw-build
+    run git read-tree --reset refs/heads/mdw-build
+    run git checkout-index -afu
+    assign gitversion "$(git describe --abbrev=4)"
     ;;
 esac
 
 ## Check the version number.
 hack_dch_p=no
-case "$gitver,$debver" in
+case "$gitversion,$debver" in
   none,* | *,none)
     ;;
   *)
-    if [ "$gitver" != "$debver" ]; then
-      warn "Git version $gitver doesn't match Debian version $debver"
+    dvref=$(echo "$debver" | tr '~' '_')
+    if [ "$gitversion" = "$dvref" ]; then
+      assign debversion "$debver"
+    else
+      warn "Git version $gitversion doesn't match Debian version $debver"
       hack_dch=yes
+      dver=$(echo $gitversion | sed 's/-/+/; s/-/./g')
+      case $debver in *~) dver=$debver$dver ;; esac
+      assign debversion "$dver"
+      now=$(date -R)
     fi
     ;;
 esac
@@ -356,15 +369,15 @@ print-distdir:
        @echo >&3 $(distdir)
 EOF
 assign distdir \
-       $({ make -f find-distdir.mk print-distdir >/dev/null 2>&1; } 3>&1)
+       $({ $make -f find-distdir.mk print-distdir >/dev/null 2>&1; } 3>&1)
 
 ## Get a tarball distribution.
 case "$distcheck" in
   yes)
-    run make $makeopts distcheck
+    run $make $makeopts distcheck
     ;;
   no)
-    run make $makeopts dist
+    run $make $makeopts dist
     ;;
 esac
 
@@ -393,10 +406,8 @@ case "$debian" in
     cd $distdir
     case $hack_dch in
       yes)
-       dver=$(echo $gitver | sed 's/-/+/; s/-/./g')
-       now=$(date -R)
        cat - debian/changelog >debian/changelog.new <<EOF
-$debsrc ($dver) experimental; urgency=low
+$debsrc ($debversion) experimental; urgency=low
 
   * Hacking in process, not intended for release.
 
@@ -406,9 +417,19 @@ EOF
        mv debian/changelog.new debian/changelog
        ;;
     esac
+    sbuildargs=$sbuildsrv
+    case $sbuild,$build in
+      yes,release)
+       case $sign in yes) sbuildargs="-k$signkey $sbuildargs" ;; esac
+       ;;
+      yes,*)
+       if [ -d $toppath/dist-$build.pkgs ]; then
+         sbuildargs="-p$toppath/dist-$build.pkgs $sbuildargs"
+       fi
+       ;;
+    esac
     case $sbuild,$build,$sign in
-      yes,release,yes) run mdw-sbuild -k$signkey $sbuildsrv ;;
-      yes,*) run mdw-sbuild $sbuildsrv ;;
+      yes,*) run mdw-sbuild $sbuildargs ;;
       no,release,yes) run dpkg-buildpackage -k$signkey ;;
       no,*) run dpkg-buildpackage -us -uc ;;
     esac