Blame src/perfctr-2.6.x/update-kernel

Packit 577717
#!/bin/sh
Packit 577717
# $Id: update-kernel,v 1.9.2.7 2010/07/01 17:22:27 mikpe Exp $
Packit 577717
# usage:
Packit 577717
#	cd ${kernelsrcdir}
Packit 577717
#	${perfctrsrcdir}/update-kernel
Packit 577717
Packit 577717
perfctr=
Packit 577717
patch=
Packit 577717
patchtype=
Packit 577717
nopatch=
Packit 577717
dryrun=
Packit 577717
sym=
Packit 577717
backup=
Packit 577717
maybe_redhat=
Packit 577717
maybe_suse=
Packit 577717
VERSION=
Packit 577717
PATCHLEVEL=
Packit 577717
SUBLEVEL=
Packit 577717
EXTRAVERSION=
Packit 577717
kernel=
Packit 577717
Packit 577717
usage() {
Packit 577717
    echo 'Usage: cd ${kernelsrcdir}; ${perfctrsrcdir}/update-kernel [options]'
Packit 577717
    echo 'Available options:'
Packit 577717
    echo '--patch=version force use of patch for particular kernel version'
Packit 577717
    echo '-p version      ditto'
Packit 577717
    echo '--nopatch       do not apply patch, only install new files'
Packit 577717
    echo '-n              ditto'
Packit 577717
    echo '--test          apply the patch but do not change any files'
Packit 577717
    echo '-t              ditto'
Packit 577717
    exit 1
Packit 577717
}
Packit 577717
Packit 577717
get_perfctr_srcdir() {
Packit 577717
    # XXX: use dirname instead?
Packit 577717
    perfctr=`echo $0 | sed 's+/update-kernel$++'`
Packit 577717
}
Packit 577717
Packit 577717
get_arch() {
Packit 577717
    if [ -z "$ARCH" ]; then
Packit 577717
	OLDARCH=`uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/`
Packit 577717
	ARCH=`echo $OLDARCH | sed -e s/i386/x86/ -e s/x86_64/x86/ -e s/ppc.*/powerpc/`
Packit 577717
    fi
Packit 577717
}
Packit 577717
Packit 577717
get_options() {
Packit 577717
    while [ $# -gt 0 ]; do
Packit 577717
	case "$1" in
Packit 577717
	  --patch=*)
Packit 577717
	    patch=`echo "$1" | sed s/--patch=//`
Packit 577717
	    ;;
Packit 577717
	  -p)
Packit 577717
	    shift
Packit 577717
	    if [ $# -eq 0 ]; then
Packit 577717
		echo Error: option "'-p'" requires an argument
Packit 577717
		usage
Packit 577717
	    fi
Packit 577717
	    patch="$1"
Packit 577717
	    ;;
Packit 577717
	  --nopatch|-n)
Packit 577717
	    nopatch=1
Packit 577717
	    ;;
Packit 577717
	  --test|-t)
Packit 577717
	    dryrun="--dry-run"
Packit 577717
	    ;;
Packit 577717
	  --sym)
Packit 577717
	    # not for general use
Packit 577717
	    sym=1
Packit 577717
	    ;;
Packit 577717
	  --backup)
Packit 577717
	    # not for general use
Packit 577717
	    backup=1
Packit 577717
	    ;;
Packit 577717
	  *)
Packit 577717
	    echo Error: unknown option "$1"
Packit 577717
	    usage
Packit 577717
	    ;;
Packit 577717
	esac
Packit 577717
	shift
Packit 577717
    done
Packit 577717
}
Packit 577717
Packit 577717
check_pwd_is_kernel_srcdir() {
Packit 577717
    if [ ! -f drivers/Makefile -o \( ! -f "arch/$ARCH/kernel/Makefile" -a ! -f "arch/$OLDARCH/kernel/Makefile" \) ]; then
Packit 577717
	echo "Error: `pwd` does not appear to be the top-level kernel source directory"
Packit 577717
	usage
Packit 577717
    fi
Packit 577717
}
Packit 577717
Packit 577717
check_kernel_srcdir_is_clean() {
Packit 577717
    if [ -f System.map -o -f .version ]; then
Packit 577717
	echo 'Error: kernel source is not clean; please do a "make mrproper"'
Packit 577717
	exit 1
Packit 577717
    fi
Packit 577717
}
Packit 577717
Packit 577717
get_makefile_variable() {
Packit 577717
    eval `grep "^$1 *=" Makefile | head -n 1 | sed 's/ *= */=/'`
Packit 577717
}
Packit 577717
Packit 577717
get_extra_version() {
Packit 577717
    EXTRAVERSION=`grep "^EXTRAVERSION *=" Makefile | head -n 1 | sed 's/ *= */=/'`
Packit 577717
    case "$EXTRAVERSION" in
Packit 577717
    'EXTRAVERSION=-$(shell echo $(CONFIG_RELEASE)-$(CONFIG_CFGNAME))')
Packit 577717
	maybe_suse=1
Packit 577717
	EXTRAVERSION='EXTRAVERSION=-$(shell echo $(CONFIG_RELEASE))'
Packit 577717
	;;
Packit 577717
    esac
Packit 577717
    MKF=`cat <
Packit 577717
-include .config
Packit 577717
$EXTRAVERSION
Packit 577717
default:
Packit 577717
	@echo EXTRAVERSION='\\$(EXTRAVERSION)'
Packit 577717
EOF`
Packit 577717
    eval `echo "$MKF" | make -f -`
Packit 577717
}
Packit 577717
Packit 577717
get_kernel_version() {
Packit 577717
    get_makefile_variable VERSION
Packit 577717
    get_makefile_variable PATCHLEVEL
Packit 577717
    get_makefile_variable SUBLEVEL
Packit 577717
    get_extra_version
Packit 577717
    case "$EXTRAVERSION" in
Packit 577717
    *custom)
Packit 577717
	maybe_redhat=1
Packit 577717
	EXTRAVERSION=`echo $EXTRAVERSION | sed 's/\(.*\)custom/\1/'`
Packit 577717
	;;
Packit 577717
    esac
Packit 577717
    kernel="$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION"
Packit 577717
}
Packit 577717
Packit 577717
check_given_patch() {
Packit 577717
    if [ ! -f "$perfctr/patches/patch-kernel-$patch" ]; then
Packit 577717
	alias=`grep ^$patch/ $perfctr/patches/aliases | awk -F/ '{ print $2 }'`
Packit 577717
	if [ -n "$alias" -a -f "$perfctr/patches/patch-kernel-$alias" ]; then
Packit 577717
	    patch="$alias"
Packit 577717
	    echo Using patch "$alias" for kernel "$kernel"
Packit 577717
	else
Packit 577717
	    echo Error: no patch for user-specified version "$patch" found
Packit 577717
	    echo See "$perfctr/patches/" for supported kernel versions
Packit 577717
	    exit 1
Packit 577717
	fi
Packit 577717
    fi
Packit 577717
    patchtype="(forced, kernel is $kernel)"
Packit 577717
}
Packit 577717
Packit 577717
try_standard() {
Packit 577717
    if [ -f "$perfctr/patches/patch-kernel-$kernel" ]; then
Packit 577717
	patch="$kernel"
Packit 577717
	echo Found patch for kernel "$kernel"
Packit 577717
    else
Packit 577717
	alias=`grep ^$kernel/ $perfctr/patches/aliases | awk -F/ '{ print $2 }'`
Packit 577717
	if [ -n "$alias" -a -f "$perfctr/patches/patch-kernel-$alias" ]; then
Packit 577717
	    patch="$alias"
Packit 577717
	    echo Using patch "$alias" for kernel "$kernel"
Packit 577717
	fi
Packit 577717
    fi
Packit 577717
}
Packit 577717
Packit 577717
try_redhat() {
Packit 577717
    if [ -f /etc/redhat-release ]; then
Packit 577717
	maybe_redhat=1
Packit 577717
    fi
Packit 577717
    if [ -n "$EXTRAVERSION" -a -n "$maybe_redhat" ]; then
Packit 577717
	if [ -f "$perfctr/patches/patch-kernel-$kernel-redhat" ]; then
Packit 577717
	    patch="$kernel-redhat"
Packit 577717
	    echo Found patch for RedHat kernel "$kernel"
Packit 577717
	else
Packit 577717
	    alias=`grep ^$kernel-redhat $perfctr/patches/aliases | awk -F/ '{ print $2 }'`
Packit 577717
	    if [ -n "$alias" -a -f "$perfctr/patches/patch-kernel-$alias" ]; then
Packit 577717
		patch="$alias"
Packit 577717
		echo Using patch "$alias" for RedHat kernel "$kernel"
Packit 577717
	    fi
Packit 577717
	fi
Packit 577717
    fi
Packit 577717
}
Packit 577717
Packit 577717
try_suse() {
Packit 577717
    if [ -n "$EXTRAVERSION" -a -n "$maybe_suse" ]; then
Packit 577717
	if [ -f "$perfctr/patches/patch-kernel-$kernel-suse" ]; then
Packit 577717
	    patch="$kernel-suse"
Packit 577717
	    echo Found patch for SuSE kernel "$kernel"
Packit 577717
	else
Packit 577717
	    alias=`grep ^$kernel-suse $perfctr/patches/aliases | awk -F/ '{ print $2 }'`
Packit 577717
	    if [ -n "$alias" -a -f "$perfctr/patches/patch-kernel-$alias" ]; then
Packit 577717
		patch="$alias"
Packit 577717
		echo Using patch "$alias" for SuSE kernel "$kernel"
Packit 577717
	    fi
Packit 577717
	fi
Packit 577717
    fi
Packit 577717
}
Packit 577717
Packit 577717
deduce_patch() {
Packit 577717
    try_standard
Packit 577717
    if [ -z "$patch" ]; then
Packit 577717
	try_redhat
Packit 577717
    fi
Packit 577717
    if [ -z "$patch" ]; then
Packit 577717
	try_suse
Packit 577717
    fi
Packit 577717
    if [ -z "$patch" ]; then
Packit 577717
	echo Error: no suitable patch found for kernel "$kernel"
Packit 577717
	echo See "$perfctr/patches/" for supported kernel versions
Packit 577717
	exit 1
Packit 577717
    fi
Packit 577717
    patchtype="(auto-detected)"
Packit 577717
}
Packit 577717
Packit 577717
identify_patch() {
Packit 577717
    if [ -n "$patch" ]; then
Packit 577717
	check_given_patch
Packit 577717
    else
Packit 577717
	deduce_patch
Packit 577717
    fi
Packit 577717
}
Packit 577717
Packit 577717
apply_patch() {
Packit 577717
    echo
Packit 577717
    echo Applying kernel source patch for "$patch" "$patchtype"
Packit 577717
    echo
Packit 577717
    bVt=
Packit 577717
    if [ "$backup" ]; then
Packit 577717
	bVt="-bVt"
Packit 577717
    fi
Packit 577717
    patch $dryrun $bVt -p1 < "$perfctr/patches/patch-kernel-$patch"
Packit 577717
}
Packit 577717
Packit 577717
install_file() {
Packit 577717
    if [ -n "$sym" ]; then
Packit 577717
	echo ln -sf ${perfctr}/$1/$2 $3/
Packit 577717
	if [ -z "$dryrun" ]; then
Packit 577717
	    ln -sf ${perfctr}/$1/$2 $3/
Packit 577717
	fi
Packit 577717
    else
Packit 577717
	echo tar -C "${perfctr}/$1/" --exclude CVS -cf - $2 '|' tar -C $3/ -xf -
Packit 577717
	if [ -z "$dryrun" ]; then
Packit 577717
	    tar -C "${perfctr}/$1/" --exclude CVS -cf - $2 | tar -C $3/ -xf -
Packit 577717
	fi
Packit 577717
    fi
Packit 577717
}
Packit 577717
Packit 577717
install_files() {
Packit 577717
    echo
Packit 577717
    echo Installing new kernel source files
Packit 577717
    echo
Packit 577717
    if [ -d arch/x86/include/asm ]; then
Packit 577717
	install_file linux/include/asm-x86 perfctr.h arch/x86/include/asm
Packit 577717
    elif [ -d include/asm-x86 ]; then
Packit 577717
	install_file linux/include/asm-x86 perfctr.h include/asm-x86
Packit 577717
    else
Packit 577717
	install_file linux/include/asm-x86 perfctr.h include/asm-i386
Packit 577717
	install_file linux/include/asm-x86 perfctr.h include/asm-x86_64
Packit 577717
    fi
Packit 577717
    if [ -d arch/powerpc/include/asm ]; then
Packit 577717
	install_file linux/include/asm-powerpc perfctr.h arch/powerpc/include/asm
Packit 577717
    elif [ -d include/asm-powerpc ]; then
Packit 577717
	install_file linux/include/asm-powerpc perfctr.h include/asm-powerpc
Packit 577717
    else
Packit 577717
	install_file linux/include/asm-powerpc perfctr.h include/asm-ppc
Packit 577717
    fi
Packit 577717
    if [ -d arch/arm/include/asm ]; then
Packit 577717
	install_file linux/include/asm-arm perfctr.h arch/arm/include/asm
Packit 577717
    else
Packit 577717
	install_file linux/include/asm-arm perfctr.h include/asm-arm
Packit 577717
    fi
Packit 577717
    install_file linux/include/linux perfctr.h include/linux
Packit 577717
    install_file linux/drivers perfctr drivers
Packit 577717
}
Packit 577717
Packit 577717
get_perfctr_srcdir
Packit 577717
get_arch
Packit 577717
get_options "$@"
Packit 577717
check_pwd_is_kernel_srcdir
Packit 577717
check_kernel_srcdir_is_clean
Packit 577717
get_kernel_version
Packit 577717
if [ -z "$nopatch" ]; then
Packit 577717
    identify_patch
Packit 577717
    apply_patch
Packit 577717
fi
Packit 577717
install_files