grub-shell-tester.in 2.74 KB
Newer Older
1 2
#! /bin/sh
set -e
BVK Chaitanya's avatar
BVK Chaitanya committed
3 4

# Compares GRUB script output with BASH output.
5
# Copyright (C) 2009,2010  Free Software Foundation, Inc.
BVK Chaitanya's avatar
BVK Chaitanya committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

# Initialize some variables.
21 22 23 24
prefix="@prefix@"
exec_prefix="@exec_prefix@"
datarootdir="@datarootdir@"
builddir="@builddir@"
BVK Chaitanya's avatar
BVK Chaitanya committed
25 26 27 28 29
PACKAGE_NAME=@PACKAGE_NAME@
PACKAGE_TARNAME=@PACKAGE_TARNAME@
PACKAGE_VERSION=@PACKAGE_VERSION@

# Force build directory components
30
PATH="${builddir}:$PATH"
BVK Chaitanya's avatar
BVK Chaitanya committed
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
export PATH

# Usage: usage
# Print the usage.
usage () {
    cat <<EOF
Usage: $0 [OPTION] [SOURCE]
Compares GRUB script output with BASH shell output.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --modules=MODULES       pre-load specified modules MODULES
  --qemu-opts=OPTIONS     extra options to pass to Qemu instance

$0 compares GRUB script output with BASH shell output and prints their
differences.

Report bugs to <bug-grub@gnu.org>.
EOF
}

# Check the arguments.
for option in "$@"; do
    case "$option" in
    -h | --help)
	usage
	exit 0 ;;
    -v | --version)
	echo "$0 (GNU GRUB ${PACKAGE_VERSION})"
	exit 0 ;;
    --modules=*)
	ms=`echo "$option" | sed -e 's/--modules=//'`
	modules="$modules,$ms" ;;
    --qemu-opts=*)
        qs=`echo "$option" | sed -e 's/--qemu-opts=//'`
        qemuopts="$qemuopts $qs" ;;
    -*)
	echo "Unrecognized option \`$option'" 1>&2
	usage
	exit 1
	;;
    *)
	if [ "x${source}" != x ] ; then
	    echo "too many parameters at the end" 1>&2
	    usage
	    exit 1
	fi
	source="${option}" ;;
    esac
done

if [ "x${source}" = x ] ; then
83
  tmpfile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
84
  while read REPLY; do
85
    echo $REPLY >> "${tmpfile}"
BVK Chaitanya's avatar
BVK Chaitanya committed
86
  done
87
  source="${tmpfile}"
BVK Chaitanya's avatar
BVK Chaitanya committed
88 89
fi

90
outfile1=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
91
"@builddir@/grub-shell" --qemu-opts="${qemuopts}" --modules=${modules} "${source}" >"${outfile1}"
BVK Chaitanya's avatar
BVK Chaitanya committed
92

93
outfile2=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
94
bash "${source}" >"${outfile2}"
BVK Chaitanya's avatar
BVK Chaitanya committed
95

96
if ! diff -q "${outfile1}" "${outfile2}" >/dev/null
BVK Chaitanya's avatar
BVK Chaitanya committed
97
then
BVK Chaitanya's avatar
BVK Chaitanya committed
98
  echo "${source}: GRUB and BASH outputs did not match (see diff -u ${outfile1} ${outfile2})"
BVK Chaitanya's avatar
BVK Chaitanya committed
99 100
  status=1
else
101
    rm -f "${outfile1}" "${outfile2}"
BVK Chaitanya's avatar
BVK Chaitanya committed
102 103 104 105 106
fi

exit $status