#!/bin/sh
#
# Copyright (C) 2012 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Run a few sanity checks on a given NDK release install/package
PROGNAME=$(basename "$0")
PROGDIR=$(dirname "$0")
. "$PROGDIR"/../build/tools/ndk-common.sh
panic () {
echo "ERROR: $@" >&2
exit 1
}
fail_panic () {
if [ $? != 0 ]; then panic "$@"; fi
}
# Command-line processing. Please keep this alphabetically sorted.
HELP=
NDK_DIR=
NDK_PACKAGE=
SYSTEM=
for opt; do
optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
case $opt in
--help|-h|-?)
HELP=true
;;
--package=*)
NDK_PACKAGE=$optarg
;;
--system=*)
SYSTEM=$optarg
;;
-*)
panic "Unknown option '$opt'. See --help for list of valid ones."
;;
*)
if [ -z "$NDK_DIR" ]; then
NDK_DIR=$opt
else
panic "Only one parameter (ndk directory) is supported. See --help."
fi
;;
esac
done
if [ "$HELP" ]; then
echo "Usage: $PROGNAME [options] [<ndk-install-path>]"
echo ""
echo "This script is used to run a series of sanity checks on a given"
echo "NDK release installation, or alternatively an NDK release package."
echo ""
echo "Valid options:"
echo ""
echo " --help|-h|-? Print this message."
echo " --package=<file> Specify NDK release archive file."
echo " --system=<name> Specify host system type."
echo ""
exit 0
fi
if [ -n "$NDK_PACKAGE" ]; then
if [ -n "$NDK_DIR" ]; then
panic "You can't use --package=<file> and a directory path at the same time."
fi
TMP_DIR=/tmp/ndk-$USER/tests/release
mkdir -p $TMP_DIR && rm -rf $TMP_DIR/*
echo "Unpacking '$(basename $NDK_PACKAGE)' into: $TMP_DIR"
unpack_archive "$NDK_PACKAGE" "$TMP_DIR"
fail_panic "Could not uncompress NDK release package!"
# Get into the first sub-directory. It should be something like android-ndk-*
NDK_DIR=$(ls -d $TMP_DIR/android-ndk-* | head -1)
if [ -z "$NDK_DIR" ]; then
panic "Could not find uncompressed NDK directory. Please check your package file: $TMP_DIR"
fi
elif [ -z "$NDK_DIR" ]; then
panic "Please specify an NDK installation directory, or use --package=<file> option. See --help."
fi
FAILURES=0
COUNT=0
# Run a single test, and update failure/count appropriately.
# $1: test function name, without the test_ prefix.
# $2+: test textual abstract description.
do_test () {
local NAME TEXT RET
NAME=$1
shift
echo -n "test: $@... "
TEXT=$(eval test_$NAME 2>/dev/null)
if [ $? != 0 ]; then
FAILURES=$(( $FAILURES + 1 ))
echo "KO: $TEXT"
else
echo "ok"
fi
COUNT=$(( $COUNT + 1 ))
}
# There must be a RELEASE file at the top of the NDK
# installation tree.
#
test_RELEASE () {
local RELEASE
# Check that the RELEASE.TXT file is here
if [ ! -f "$NDK_DIR/RELEASE.TXT" ]; then
echo "Missing RELEASE.TXT file."
return 1
fi
# Extract the release version
RELEASE=$(cat $NDK_DIR/RELEASE.TXT)
# Check that the ChangeLog file documents the release properly
CHANGELOG_RELEASE=$(cat $NDK_DIR/docs/CHANGES.html | grep -e "^android-ndk-" | head -1)
CHANGELOG_RELEASE=${CHANGELOG_RELEASE##android-ndk-}
if [ "$RELEASE" != "$CHANGELOG_RELEASE" ]; then
echo "CHANGES.html documents release '$CHANGELOG_RELEASE', but RELEASE.TXT contains '$RELEASE'!"
return 1
fi
return 0
}
do_test RELEASE "Checking top-level release file"
echo -n "$FAILURES/$COUNT tests failed."
if [ "$FAILURES" = 0 ]; then
echo "Congratulations!"
exit 0
else
echo "Please fix the errors!"
exit 1
fi