Blame compute-PATCHVERSION.sh

Bernhard M. Wiedemann 6ebc4a
#! /bin/bash
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
export LANG=POSIX
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
path=(.)
Bernhard M. Wiedemann 6ebc4a
while test $# -gt 0; do
Bernhard M. Wiedemann 6ebc4a
	case "$1" in
Bernhard M. Wiedemann 6ebc4a
	--patches)
Bernhard M. Wiedemann 6ebc4a
		path[${#path[@]}]=$2
Bernhard M. Wiedemann 6ebc4a
		shift 2
Bernhard M. Wiedemann 6ebc4a
		;;
Bernhard M. Wiedemann 6ebc4a
	*)
Bernhard M. Wiedemann 6ebc4a
		echo "Usage $0 [--patches <dir>]" >&2
Bernhard M. Wiedemann 6ebc4a
		exit 1
Bernhard M. Wiedemann 6ebc4a
	esac
Bernhard M. Wiedemann 6ebc4a
done
Bernhard M. Wiedemann 6ebc4a
if test "${path[*]}" = "."; then
Bernhard M. Wiedemann 6ebc4a
	path=(. ..)
Bernhard M. Wiedemann 6ebc4a
fi
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
source $(dirname $0)/config.sh
Bernhard M. Wiedemann 6ebc4a
parse_srcversion()
Bernhard M. Wiedemann 6ebc4a
{
Bernhard M. Wiedemann 6ebc4a
	local IFS=.
Bernhard M. Wiedemann 6ebc4a
	set -- ${SRCVERSION%%-*}
Bernhard M. Wiedemann 6ebc4a
	VERSION=$1
Bernhard M. Wiedemann 6ebc4a
	PATCHLEVEL=${2:-0}
Bernhard M. Wiedemann 6ebc4a
	SUBLEVEL=${3:-0}
Bernhard M. Wiedemann 6ebc4a
	EXTRAVERSION=${SRCVERSION#${SRCVERSION%%-*}}
Bernhard M. Wiedemann 6ebc4a
}
Bernhard M. Wiedemann 6ebc4a
parse_srcversion
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
EXTRA_SYMBOLS=$(set -- $([ -e $(dirname $0)/extra-symbols ] && cat $(dirname $0)/extra-symbols) ; echo $*)
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
series=$(mktemp)
Bernhard M. Wiedemann 6ebc4a
tmp_files="$series"
Bernhard M. Wiedemann 6ebc4a
trap 'rm -rf $tmp_files' EXIT
Bernhard M. Wiedemann 6ebc4a
warned=false
Bernhard M. Wiedemann 6ebc4a
while read patch; do
Bernhard M. Wiedemann 6ebc4a
	dir=${patch%/*}
Bernhard M. Wiedemann 6ebc4a
	for p in "${path[@]}"; do
Bernhard M. Wiedemann 6ebc4a
		if test -e "$p/$patch"; then
Bernhard M. Wiedemann 6ebc4a
			echo "$p/$patch"
Bernhard M. Wiedemann 6ebc4a
			continue 2
Bernhard M. Wiedemann 6ebc4a
		fi
Bernhard M. Wiedemann 6ebc4a
	done
Bernhard M. Wiedemann 6ebc4a
	for p in "${path[@]}"; do
Bernhard M. Wiedemann 6ebc4a
		if test -e "$p/$dir.tar.bz2"; then
Bernhard M. Wiedemann 6ebc4a
			echo "unpacking $p/$dir.tar.bz2" >&2
Bernhard M. Wiedemann 6ebc4a
			if ! $warned; then
Bernhard M. Wiedemann 6ebc4a
				echo "pass --patches <directory with unpacked tarballs> to avoid this" >&2
Bernhard M. Wiedemann 6ebc4a
				warned=true
Bernhard M. Wiedemann 6ebc4a
			fi
Bernhard M. Wiedemann 6ebc4a
			tmp_files="$tmp_files $dir"
Bernhard M. Wiedemann 6ebc4a
			tar -xjf "$p/$dir.tar.bz2"
Bernhard M. Wiedemann 6ebc4a
			echo "$patch"
Bernhard M. Wiedemann 6ebc4a
			continue 2
Bernhard M. Wiedemann 6ebc4a
		fi
Bernhard M. Wiedemann 6ebc4a
	done
Bernhard M. Wiedemann 6ebc4a
	echo "Can't find $patch" >&2
Bernhard M. Wiedemann 6ebc4a
	exit 1
Bernhard M. Wiedemann 6ebc4a
done >"$series" < <($(dirname $0)/guards $EXTRA_SYMBOLS 
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
# Parse all the changes to KERNELRELEASE out of all patches and
Bernhard M. Wiedemann 6ebc4a
# convert them to shell code that can be evaluated. Evaluate it.
Bernhard M. Wiedemann 6ebc4a
eval "$(
Bernhard M. Wiedemann 6ebc4a
    <"$series" xargs awk '
Bernhard M. Wiedemann 6ebc4a
    /^--- |^\+\+\+ / \
Bernhard M. Wiedemann 6ebc4a
	{ M = match($2, /^[^\/]+\/Makefile( \t|$)/) }
Bernhard M. Wiedemann 6ebc4a
    M && /^+(VERSION|PATCHLEVEL|SUBLEVEL|EXTRAVERSION)/ \
Bernhard M. Wiedemann 6ebc4a
	{ print }
Bernhard M. Wiedemann 6ebc4a
    ' \
Bernhard M. Wiedemann 6ebc4a
    | sed -e 's,^+,,' -e 's, *= *\(.*\),="\1",'
Bernhard M. Wiedemann 6ebc4a
)"
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
echo "$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION"