### 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
###--------------------------------------------------------------------------
[no]debian
[no]upload
[no]clean
+ [no]vpath
EOF
}
debian=yes
upload=yes
clean=yes
+vpath=yes
for opt; do
case "$opt" in
checkout) checkout=yes checkoutrev=HEAD ;;
release) build=release ;;
norelease) build=test ;;
- setup | distcheck | debian | upload | clean)
+ setup | distcheck | debian | upload | clean | vpath)
eval "$opt=yes"
;;
- nosetup | nodistcheck | nodebian | noupload | noclean)
+ nosetup | nodistcheck | nodebian | noupload | noclean | novpath)
eval "${opt#no}=no"
;;
*)
esac
done
+## Parse DEB_BUILD_OPTIONS.
+jobs=1
+set -- $DEB_BUILD_OPTIONS
+for opt; do
+ case "$opt" in
+ parallel=*) jobs=${opt#*=} ;;
+ esac
+done
+
+makeopts=""
+case $jobs in 1) ;; *) makeopts="$makeopts -j$jobs" ;; esac
+
###--------------------------------------------------------------------------
### Utility functions.
### 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"
;;
esac
-## Maybe check ot a copy of the source.
+## Maybe check out a copy of the source.
case "$checkout" in
yes)
cd $releasepath
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
+case "$vpath,$(yesno [ -e $srcpath/configure ])" in
+ yes,yes)
+ assign buildpath $releasepath/_build
+ mkdir $buildpath
+ cd $buildpath
+ run $srcpath/configure
+ ;;
+ no,yes)
+ info "VPATH build disabled"
+ assign buildpath $srcpath
+ distcheck=no
+ cd $srcpath
+ run ./configure
+ ;;
+ *,no)
+ info "no configure script"
+ assign buildpath $srcpath
+ cd $srcpath
+ ;;
+esac
## Discover the release name.
cat >find-distdir.mk <<'EOF'
## Get a tarball distribution.
case "$distcheck" in
yes)
- run make distcheck
+ run make $makeopts distcheck
;;
no)
- run make dist
+ run make $makeopts dist
;;
esac
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