From: Mark Wooding Date: Sat, 27 Dec 2008 11:56:06 +0000 (+0000) Subject: mdw-build: Bring into the fold. X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/profile/commitdiff_plain/7ee12623c736a6c2202b1268086c1bb2288a3b9c mdw-build: Bring into the fold. --- diff --git a/mdw-build b/mdw-build new file mode 100755 index 0000000..903db37 --- /dev/null +++ b/mdw-build @@ -0,0 +1,260 @@ +#! /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 <&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) + cp $distdir.tar.gz /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 -------------------------------------------------- diff --git a/setup b/setup index da71b34..15292b6 100755 --- a/setup +++ b/setup @@ -187,6 +187,7 @@ echo " done." scripts=" mdw-editor mdw-conf + mdw-build movemail-hack emerge-hack lesspipe.sh