#!/bin/sh
#
-# mbuild - make sbuild and reprepro work together
+# mbuild - automate builds with sbuild and dinstall the result
#
# Copyright (c) 2008 martin f. krafft <madduck@debian.org>
# Released under the terms of the Artistic Licence 2.0.
#
set -eu
-BUNDLEDIR="$HOME/reprepro/bundles"
-REPREPRODIR="$HOME/reprepro"
+ME="${0##*/}"
-DINSTALL="reprepro --basedir $REPREPRODIR include \$dist"
+BUILDDIR="$(mktemp -dt $ME.XXXXXXXX)"
+trap "cd / && rm -R '$BUILDDIR'" 0
-GNUPGHOME="$REPREPRODIR/.gnupg"; export GNUPGHOME
-KEYID=330c4a75
+BUNDLE_DIR="${TMPDIR:-/tmp}"
+TARGET_DIR="$PWD"
+dinstall() {
+ echo "Copying files destined for $1 back to $TARGET_DIR..."
+ dcmd cp -v "$2" "$TARGET_DIR"
+}
-DIR="$HOME/sbuild"
-cd "$DIR"
+KEYID=
+
+MBUILDRCS="/etc/mbuild/rc $HOME/.mbuildrc $HOME/.mbuild/rc"
+for rc in $MBUILDRCS; do
+ [ -r "$rc" ] && . "$rc"
+done
+
+if [ -z "$KEYID" ]; then
+ echo "E: \$KEYID is not defined in rc file." >&2
+ exit 1
+fi
+
+DEB_BUILD_ARCH="$(dpkg-architecture -qDEB_BUILD_ARCH)"
+
+about()
+{
+ echo "$ME -- wrapper for sbuild"
+ echo "Copyright © martin f. krafft <madduck@debian.org>"
+ echo "Released under the terms of the Artistic Licence 2.0"
+}
+
+usage()
+{
+ about
+ echo
+ echo "Usage: $ME [options] [sbuild_options] file_source.changes"
+ echo
+ echo "Valid options are:"
+ cat <<-_eof | column -s\& -t
+ --dist & specify the target distribution (default: sid)
+ --arch & specify the target architecture (default: $DEB_BUILD_ARCH)
+ -h|--help & show this output.
+ -V|--version & show version information.
+ _eof
+}
sbuild_args=
schangesfile=
dist=
for opt in "$@"; do
case "$opt" in
+ -h|--help) usage; exit 0;;
+ -V|--version) about; exit 0;;
--arch=*) arch="${opt#--arch=}";;
--dist=*) dist="${opt#--dist=}";;
-sa) sbuild_args="${sbuild_args:+$sbuild_args }--force-orig-source";;
esac
done
+if [ -z "$schangesfile" ]; then
+ usage
+ exit 1
+fi
+
+[ -z "$arch" ] && arch="$DEB_BUILD_ARCH"
+[ -z "$dist" ] && dist="unstable"
+
schangesfile_basename="${schangesfile##*/}"
packagenameversion="${schangesfile_basename%_*}"
-builddir="$(mktemp -dp "$DIR" "${packagenameversion}.XXXXXXXX")"
-trap "rm -R '$builddir'" 0
-
-cd "${schangesfile%/*}"
-dcmd cp "${schangesfile##*/}" "$builddir"
+case "$schangesfile" in
+ */*) cd "${schangesfile%/*}";;
+ *) :;;
+esac
+dcmd cp "${schangesfile##*/}" "$BUILDDIR"
schangesfile="$schangesfile_basename"
-cd "$builddir"
+cd "$BUILDDIR"
sbuild $sbuild_args --arch="$arch" --arch-all --dist="$dist" --keyid=$KEYID \
"$packagenameversion".dsc
changesfile="${packagenameversion}_${arch}.changes"
-$SHELL
-
-eval $DINSTALL "$schangesfile"
-eval $DINSTALL "$changesfile"
+dinstall "$dist" "$schangesfile"
+dinstall "$dist" "$changesfile"
mv "$changesfile" "${changesfile}.binonly"
mergechanges "$schangesfile" "${changesfile}.binonly" > "$changesfile"
rm "${changesfile}.binonly" "$schangesfile"
-bundle="$BUNDLEDIR/${packagenameversion}.bundle.tar"
-dcmd tar -chf "$bundle" "$changesfile"
+DATESTR="$(date +%Y.%m.%d.%H%M%S)"
+BUILD_PREFIX="${packagenameversion}_${arch}.${DATESTR}"
+
+mv current "${BUILD_PREFIX}".buildlog
+rm -f current-*
-rm -r "$builddir"
+bundle="${BUNDLE_DIR}/${BUILD_PREFIX}".bundle.tar
+tar -chf "$bundle" *
+
+rm -r "$BUILDDIR"
trap - 0
-echo "Bundle available at $bundle"
+echo "Bundle available at $bundle ."
+
+exit 0