+++ /dev/null
-#! /bin/bash
-###
-### Build script for Debian packages
-###
-### (c) 2008 Mark Wooding
-###
-
-###----- Licensing notice ---------------------------------------------------
-###
-### This program is free software; you can redistribute it and/or modify
-### it under the terms of the GNU General Public License as published by
-### the Free Software Foundation; either version 2 of the License, or
-### (at your option) any later version.
-###
-### This program is distributed in the hope that it will be useful,
-### but WITHOUT ANY WARRANTY; without even the implied warranty of
-### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-### GNU General Public License for more details.
-###
-### You should have received a copy of the GNU General Public License
-### along with this program; if not, write to the Free Software Foundation,
-### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-set -e
-
-###--------------------------------------------------------------------------
-### Parse options.
-
-usage () {
- cat <<EOF
-Usage: $0 [-vr] BUILDOPT
-
-Build options:
-
- [no]checkout[=REV]
- [no]release
- [no]setup
- [no]distcheck
- [no]debian
- [no]upload
- [no]clean
-EOF
-}
-
-## Parse simple options.
-verbose=no
-while getopts "hvr" opt; do
- case "$opt" in
- h) usage; exit 0 ;;
- v) verbose=yes ;;
- *) exit 1 ;;
- esac
-done
-shift $((OPTIND - 1))
-
-## Parse the build options.
-checkout=yes
-checkoutrev=HEAD
-build=test
-setup=yes
-distcheck=yes
-debian=yes
-upload=yes
-clean=yes
-for opt; do
- case "$opt" in
- checkout) checkout=yes checkoutrev=HEAD ;;
- checkout=*) checkout=yes checkoutrev=${opt#*=} ;;
- nocheckout) checkout=no ;;
- release) build=release ;;
- norelease) build=test ;;
-
- setup | distcheck | debian | upload | clean)
- eval "$opt=yes"
- ;;
- nosetup | nodistcheck | nodebian | noupload | noclean)
- eval "${opt#no}=no"
- ;;
- *)
- usage >&2
- exit 1
- ;;
- esac
-done
-
-###--------------------------------------------------------------------------
-### Utility functions.
-
-exec 3>&2 4>/dev/null 5>&2
-
-notify () {
- colour=$1 message=$2
- echo $message >&4
- echo "$(tput bold; tput setaf $colour)$message$(tput sgr0; tput op)" >&5
-}
-
-fail () {
- notify 1 "!!! $*"
- exit 1
-}
-
-info () {
- notify 6 "--- $*"
-}
-
-assign () {
- info "$1 = $2"
- eval "$1=$2"
-}
-
-runx () {
- notify 2 "+++ $*"
- "$@" 2>&3 || fail "$1: exit $?"
-}
-
-run () { runx "$@" >&3; }
-
-yesno () {
- echo -n "(test $*)" >&4
- if "$@" >&4 2>&4; then
- echo "(yes)" >&4
- echo yes
- else
- echo "(no)" >&4
- echo no
- fi
-}
-
-###--------------------------------------------------------------------------
-### Do the building.
-
-## Find the top-level package directory.
-while [ ! -f configure.ac -a ! -f configure.in -a ! -f .links ]; do
- case "$(pwd)" in
- /)
- fail "couldn't find top-level directory"
- ;;
- esac
- cd ..
-done
-assign srcpath $(pwd)
-
-## Construct the output directory.
-assign releasepath $srcpath/dist-$build
-chmod -R +w $releasepath 2>/dev/null|| :
-rm -rf $releasepath 2>/dev/null || :
-mkdir $releasepath
-case $verbose in
- no)
- exec 4>$releasepath/mdw-build.log 3>&4 ||
- fail "Failed to create log."
- ;;
-esac
-
-## Maybe check out a copy of the source.
-case "$checkout,$setup,$(yesno [ -d $srcpath/.git ])" in
- yes,no,*)
- fail "Inconsistent options: can't check out without setup."
- ;;
- yes,yes,no)
- info "No Git repository found."
- ;;
- yes,yes,yes)
- cd $srcpath
- [ "$(git ls-files -m)" = "" ] ||
- fail "working tree has uncommitted changes"
- cd $releasepath
- run git clone -sn $srcpath/.git _source
- assign srcpath $releasepath/_source
- cd $srcpath
- run git checkout -b mdw-build $checkoutrev
- ;;
-esac
-
-## Maybe refresh the build machinery.
-case "$setup" in
- yes)
- run mdw-setup
- ;;
-esac
-
-## Initialize the build directory.
-if [ -e $srcpath/configure ]; then
- assign buildpath $releasepath/_build
- mkdir $buildpath
- cd $buildpath
- run $srcpath/configure
-else
- info "no configure script"
- assign buildpath $srcpath
- cd $srcpath
-fi
-
-## Discover the release name.
-cat >find-distdir.mk <<'EOF'
-include Makefile
-print-distdir:
- @echo $(distdir)
-EOF
-assign distdir $(make -f find-distdir.mk print-distdir)
-
-## Get a tarball distribution.
-case "$distcheck" in
- yes)
- run make distcheck
- ;;
- no)
- run make dist
- ;;
-esac
-
-cd $releasepath
-
-if ! tar tfz $buildpath/$distdir.tar.gz | grep -q RELEASE; then
- fail "missing RELEASE file in distribution"
-fi
-
-run mv $buildpath/$distdir.tar.gz .
-
-## Maybe build the Debian packages.
-case "$debian,$(yesno [ -d $srcpath/debian ])" in
- yes,no)
- info "No debian directory found."
- debian=no
- ;;
- yes,yes)
- run tar xvfz $distdir.tar.gz
- cd $distdir
- run dpkg-buildpackage -k$(mdw-conf releasekey)
- ;;
-esac
-
-## Maybe upload Debian packages.
-cd $releasepath
-case "$upload,$build" in
- yes,test)
- info "Test build: not uploading."
- ;;
- yes,release)
- run rsync $distdir.tar.gz \
- $(mdw-conf upload-target metalzone.distorted.org.uk:/home/ftp/pub/mdw/)
- case "$debian" in
- yes)
- run dput -f $(mdw-conf dput-target metalzone) *.changes
- ;;
- esac
-esac
-
-## Tidy up.
-case "$clean" in
- yes)
- rm -rf $releasepath/$distdir
- rm -rf $releasepath/_source
- rm -rf $releasepath/_build
- ;;
-esac
-
-## Done.
-info "All OK."
-
-###----- That's all, folks --------------------------------------------------