### along with this program; if not, write to the Free Software Foundation,
### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+###--------------------------------------------------------------------------
+### Conventions for build systems.
+###
+### This script is designed to work with a variety of `make'-based build
+### systems, but there are a number of conventions which must be followed if
+### this is going to work properly.
+###
+### * There must be a `configure.ac', `configure.in', or `.links' file, or
+### a `.git' directory in the project top-level, so that we can find it.
+###
+### * The following `make' variables must be assigned in the top-level
+### Makefile, after `mdw-build' has constructed it.
+###
+### distdir The name of the top-level project directory in the
+### source distribution, and the base name for
+### distribution archives; should be of the form
+### `PROJECT-VERSION'.
+###
+### The following `make' targets must be available in the top-level
+### Makefile.
+###
+### dist Write to $(distdir).tar.gz a source distribution of
+### the package.
+###
+### distcheck As for `dist', but also build and test the project.
+###
+### * The source distribution constructed by `make dist' must contain a file
+### $(distdir)/RELEASE containing the release name. This isn't currently
+### tested, but it might be later.
+
set -e
###--------------------------------------------------------------------------
exit 1
}
+warn () {
+ case $build in
+ release) fail "$*" ;;
+ *) notify 5 "??? $*" ;;
+ esac
+}
+
info () {
notify 6 "--- $*"
}
### Do the building.
## Find the top-level package directory.
-while [ ! -f configure.ac -a ! -f configure.in -a ! -f .links ]; do
+while [ ! -f configure.ac -a ! -f configure.in -a \
+ ! -f .links -a ! -d .git ]; do
case "$(pwd)" in
/)
fail "couldn't find top-level directory"
## Construct the output directory.
assign releasepath $srcpath/dist-$build
-chmod -R +w $releasepath 2>/dev/null|| :
+chmod -R +w $releasepath 2>/dev/null || :
rm -rf $releasepath 2>/dev/null || :
mkdir $releasepath
case $verbose in
;;
esac
-## Maybe check out a copy of the source.
+## Do we have a Git repository?
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."
+ checkout=no gitver=none
;;
yes,yes,yes)
cd $srcpath
[ "$(git ls-files -m)" = "" ] ||
- fail "working tree has uncommitted changes"
+ warn "working tree has uncommitted changes"
+ gitver=$(git describe)
+esac
+
+## Is there Debian build equipment?
+case "$debian,$(yesno [ -d $srcpath/debian ])" in
+ yes,no)
+ info "No debian directory found."
+ debian=no debver=none
+ ;;
+ yes,yes)
+ debver=$(dpkg-parsechangelog | sed -n 's/^Version: //p')
+ ;;
+esac
+
+## Check the version number.
+case "$gitver,$debver" in
+ none,* | *,none)
+ ;;
+ *)
+ [ "$gitver" = "$debver" ] ||
+ warn "Git version $gitver doesn't match Debian version $debver"
+ ;;
+esac
+
+## Maybe check ot a copy of the source.
+case "$checkout" in
+ yes)
cd $releasepath
run git clone -sn $srcpath/.git _source
assign srcpath $releasepath/_source
cd $releasepath
-if ! tar tfz $buildpath/$distdir.tar.gz | grep -q RELEASE; then
+if ! tar tf $buildpath/$distdir.tar.gz 2>/dev/null | 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)
+case "$debian" in
+ yes)
run tar xvfz $distdir.tar.gz
cd $distdir
run dpkg-buildpackage -k$(mdw-conf releasekey)
;;
yes,release)
run rsync $distdir.tar.gz \
- $(mdw-conf upload-target metalzone.distorted.org.uk:/home/ftp/pub/mdw/)
+ $(mdw-conf upload-target ftp.distorted.org.uk:~ftp/pub/mdw/)
case "$debian" in
yes)
- run dput -f $(mdw-conf dput-target metalzone) *.changes
+ run dput -f $(mdw-conf dput-target distorted) *.changes
;;
esac
esac