#!/bin/bash set -e shopt -s extglob # Set defaults from the running kernel arch="$(dpkg --print-architecture)" kernelabi="$(uname -r)" ff="${kernelabi#+([^-])-@(trunk|?(rc)+([0-9])|0.@(bpo|deb+([0-9])).+([0-9]))-}" if [ "x$ff" != "x$kernelabi" ]; then flavour="${ff#@(openvz|rt|vserver|xen)-}" if [ "x$flavour" != "x$ff" ]; then featureset="${ff%-$flavour}" else featureset=none fi else flavour= featureset=none fi dbginfo= fuzz=0 jobs=$(nproc) eval "set -- $(getopt -n "$0" -o "f:gj:s:" -l "fuzz:" -- "$@")" while true; do case "$1" in -f) flavour="$2"; shift 2 ;; -g) dbginfo=y; shift 1 ;; -j) jobs="$2"; shift 2 ;; -s) featureset="$2"; shift 2 ;; --fuzz) fuzz="$2"; shift 2;; --) shift 1; break ;; esac done if [ $# -lt 1 ]; then echo >&2 "Usage: $0 [] ..." cat >&2 < specify the 'flavour' of kernel to build, e.g. 686-pae -g enable debug info -j specify number of compiler jobs to run in parallel (default: number of available processors) -s specify an optional featureset to apply, e.g. rt --fuzz set the maximum patch fuzz factor (default: 0) EOF exit 2 fi if [ -z "$flavour" ]; then echo >&2 "You must specify a flavour to build with the -f option" exit 2 fi profiles=nodoc,noudeb,pkg.linux.nosource,pkg.linux.mintools if [ -z "$dbginfo" ]; then profiles="$profiles,pkg.linux.nokerneldbg,pkg.linux.nokerneldbginfo" fi # Check build-dependencies early if possible if [ -f debian/control ]; then dpkg-checkbuilddeps -P"$profiles" fi # Append 'a~test' to Debian version; this should be less than any official # successor and easily recognisable version="$(dpkg-parsechangelog | sed 's/^Version: //; t; d')" if [ "${version%a~test}" = "$version" ]; then version="$version"a~test dch -v "$version" --distribution UNRELEASED "Testing patches $*" fi # Ignore user's .quiltrc alias quilt='quilt --quiltrc -' # Try to clean up any previous test patches if [ "$featureset" = none ]; then patchdir=debian/patches while patch="$(quilt top 2>/dev/null)" && \ [ "${patch#test/}" != "$patch" ]; do quilt pop -f done while patch="$(quilt next 2>/dev/null)" && \ [ "${patch#test/}" != "$patch" ]; do quilt delete -r "$patch" done else patchdir=debian/patches-${featureset} sed -i '/^test\//d' $patchdir/series fi # Prepare a new directory for the patches rm -rf $patchdir/test/ mkdir $patchdir/test # Prepare a new directory for the config; override ABI name, featuresets, flavours rm -rf debian/config.local mkdir debian/config.local debian/config.local/"$arch" debian/config.local/"$arch"/"$featureset" cat >debian/config.local/defines <debian/config.local/"$arch"/defines <debian/config.local/"$arch"/"$featureset"/defines <>debian/config.local/"$arch"/"$featureset"/defines <