Blob Blame History Raw
#!/bin/sh
#
# Given a series.conf file and a directory with patches, applies them to the
# current directory.
# Used by kernel-source.spec.in and kernel-binary.spec.in

USAGE="$0 [--vanilla] <series.conf> <patchdir> [symbol ...]"

set -e
set -o pipefail
vanilla=false
if test "$1" == "--vanilla"; then
	vanilla=true
	shift
fi
if test $# -lt 2; then
	echo "$USAGE" >&2
	exit 1
fi
DIR="${0%/*}"
SERIES_CONF=$1
PATCH_DIR=$2
shift 2

trap 'rm -f "$series"' EXIT
series=$(mktemp)
# support for patches in patches.addon/series
cp "$SERIES_CONF" "$series"
if ! $vanilla && test -e "$PATCH_DIR/patches.addon/series"; then
	# make it user-friendly and automatically prepend "patches.addon/"
	# if there is no "/"
	sed -r 's|^([[:space:]]*)([^#[:space:]][^/]*)$|\1patches.addon/\2|' \
		"$PATCH_DIR/patches.addon/series" >>"$series"
fi

(
	echo "trap 'echo \"*** patch \$_ failed ***\"' ERR"
	echo "set -ex"
	"$DIR"/guards "$@" <"$series" | \
	if $vanilla; then
		sed -rn '/^patches\.(kernel\.org|rpmify)\//p'
	else
		cat
	fi |\
	sed "s|^|patch -s -F0 -E -p1 --no-backup-if-mismatch -i $PATCH_DIR/|"
) | sh