1 #!/bin/sh 2 # 3 # Copyright (C) 2012 The Android Open Source Project 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 # 17 18 # Run a few sanity checks on a given NDK release install/package 19 20 PROGNAME=$(basename "$0") 21 PROGDIR=$(dirname "$0") 22 23 . "$PROGDIR"/../build/tools/ndk-common.sh 24 25 panic () { 26 echo "ERROR: $@" >&2 27 exit 1 28 } 29 30 fail_panic () { 31 if [ $? != 0 ]; then panic "$@"; fi 32 } 33 34 # Command-line processing. Please keep this alphabetically sorted. 35 HELP= 36 NDK_DIR= 37 NDK_PACKAGE= 38 SYSTEM= 39 40 for opt; do 41 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'` 42 case $opt in 43 --help|-h|-?) 44 HELP=true 45 ;; 46 --package=*) 47 NDK_PACKAGE=$optarg 48 ;; 49 --system=*) 50 SYSTEM=$optarg 51 ;; 52 -*) 53 panic "Unknown option '$opt'. See --help for list of valid ones." 54 ;; 55 *) 56 if [ -z "$NDK_DIR" ]; then 57 NDK_DIR=$opt 58 else 59 panic "Only one parameter (ndk directory) is supported. See --help." 60 fi 61 ;; 62 esac 63 done 64 65 if [ "$HELP" ]; then 66 echo "Usage: $PROGNAME [options] [<ndk-install-path>]" 67 echo "" 68 echo "This script is used to run a series of sanity checks on a given" 69 echo "NDK release installation, or alternatively an NDK release package." 70 echo "" 71 echo "Valid options:" 72 echo "" 73 echo " --help|-h|-? Print this message." 74 echo " --package=<file> Specify NDK release archive file." 75 echo " --system=<name> Specify host system type." 76 echo "" 77 exit 0 78 fi 79 80 if [ -n "$NDK_PACKAGE" ]; then 81 if [ -n "$NDK_DIR" ]; then 82 panic "You can't use --package=<file> and a directory path at the same time." 83 fi 84 TMP_DIR=/tmp/ndk-$USER/tests/release 85 mkdir -p $TMP_DIR && rm -rf $TMP_DIR/* 86 87 echo "Unpacking '$(basename $NDK_PACKAGE)' into: $TMP_DIR" 88 unpack_archive "$NDK_PACKAGE" "$TMP_DIR" 89 fail_panic "Could not uncompress NDK release package!" 90 91 # Get into the first sub-directory. It should be something like android-ndk-* 92 NDK_DIR=$(ls -d $TMP_DIR/android-ndk-* | head -1) 93 if [ -z "$NDK_DIR" ]; then 94 panic "Could not find uncompressed NDK directory. Please check your package file: $TMP_DIR" 95 fi 96 elif [ -z "$NDK_DIR" ]; then 97 panic "Please specify an NDK installation directory, or use --package=<file> option. See --help." 98 fi 99 100 FAILURES=0 101 COUNT=0 102 103 # Run a single test, and update failure/count appropriately. 104 # $1: test function name, without the test_ prefix. 105 # $2+: test textual abstract description. 106 do_test () { 107 local NAME TEXT RET 108 NAME=$1 109 shift 110 echo -n "test: $@... " 111 TEXT=$(eval test_$NAME 2>/dev/null) 112 if [ $? != 0 ]; then 113 FAILURES=$(( $FAILURES + 1 )) 114 echo "KO: $TEXT" 115 else 116 echo "ok" 117 fi 118 COUNT=$(( $COUNT + 1 )) 119 } 120 121 # There must be a RELEASE file at the top of the NDK 122 # installation tree. 123 # 124 test_RELEASE () { 125 local RELEASE 126 127 # Check that the RELEASE.TXT file is here 128 if [ ! -f "$NDK_DIR/RELEASE.TXT" ]; then 129 echo "Missing RELEASE.TXT file." 130 return 1 131 fi 132 133 # Extract the release version 134 RELEASE=$(cat $NDK_DIR/RELEASE.TXT) 135 136 # Check that the ChangeLog file documents the release properly 137 CHANGELOG_RELEASE=$(cat $NDK_DIR/docs/CHANGES.html | grep -e "^android-ndk-" | head -1) 138 CHANGELOG_RELEASE=${CHANGELOG_RELEASE##android-ndk-} 139 140 if [ "$RELEASE" != "$CHANGELOG_RELEASE" ]; then 141 echo "CHANGES.html documents release '$CHANGELOG_RELEASE', but RELEASE.TXT contains '$RELEASE'!" 142 return 1 143 fi 144 145 return 0 146 } 147 148 149 do_test RELEASE "Checking top-level release file" 150 151 echo -n "$FAILURES/$COUNT tests failed." 152 if [ "$FAILURES" = 0 ]; then 153 echo "Congratulations!" 154 exit 0 155 else 156 echo "Please fix the errors!" 157 exit 1 158 fi 159