1c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein#!/bin/bash 2c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# 3c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# Copyright 2009 The Android Open Source Project 4c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# 5c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# Licensed under the Apache License, Version 2.0 (the "License"); 6c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# you may not use this file except in compliance with the License. 7c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# You may obtain a copy of the License at 8c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# 9c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# http://www.apache.org/licenses/LICENSE-2.0 10c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# 11c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# Unless required by applicable law or agreed to in writing, software 12c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# distributed under the License is distributed on an "AS IS" BASIS, 13c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# See the License for the specific language governing permissions and 15c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# limitations under the License. 16c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 17c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# 18c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# Script to run all the tests, which only works for host builds. This 19c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# uses some heuristics to navigate the source tree and built output, 20c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# and it won't be too surprising if this breaks with some change in 21c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# the build system. 22c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# 23c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 24c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinlibName="libffi-host" 25c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinexecFile="/tmp/run-test-$$" 26c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinoutFile="/tmp/out-test-$$.txt" 27c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 28c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 29c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# Set up prog to be the path of this script, including following symlinks, 30c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# and set up progdir to be the fully-qualified pathname of its directory. 31c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 32c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinprog="$0" 33c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinwhile [ -h "${prog}" ]; do 34c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein newProg=`/bin/ls -ld "${prog}"` 35c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein newProg=`expr "${newProg}" : ".* -> \(.*\)$"` 36c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein if expr "x${newProg}" : 'x/' >/dev/null; then 37c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein prog="${newProg}" 38c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein else 39c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein progdir=`dirname "${prog}"` 40c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein prog="${progdir}/${newProg}" 41c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein fi 42c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteindone 43c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinorigDir=`pwd` 44c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinprogDir=`dirname "${prog}"` 45c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteincd "${progDir}" 46c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinprogDir=`pwd` 47c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinprog="${progDir}"/`basename "${prog}"` 48c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 49c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 50c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# Find the base directory of the source tree (which is expected to be 51c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# the first directory found up the tree that contains both an out and 52c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# a build directory). 53c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 54c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinwhile true; do 55c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein if [ -d out -a -d build ]; then 56c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein break; 57c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein fi 58c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein cd .. 59c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein if [ "x`pwd`" = "x/" ]; then 60c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein echo "could not find top of source tree" 1>&2 61c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein exit 1 62c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein fi 63c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteindone 64c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 65c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinsourceDir=`pwd` 66c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 67c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 68c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# Find the library, collect the list of test files, and set other variables. 69c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 70c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinif get_build_var x >/dev/null 2>&1; then 71c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein : # Already have build system defs. 72c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinelse 73c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein # Pull in envsetup.sh. 74c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein . build/envsetup.sh 75c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinfi 76c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 77c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinCC=`get_build_var CC` 78c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinHOST_OS=`get_build_var HOST_OS` 79c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinHOST_ARCH=`get_build_var HOST_ARCH` 80c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 81c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# All this is to make the libFile be an absolute path. 82c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinlibFile=`find out/host/${HOST_OS}-${HOST_ARCH} -name "${libName}.a" | head -1` 83c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinlibDir=`dirname ${libFile}` 84c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinlibDir=`cd "$libDir"; pwd` 85c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteinlibFile="${libDir}/${libName}.a" 86c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 87c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinif [ "x$libFile" = "x" ]; then 88c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein echo "could not find ${libName}" 1>&2 89c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein exit 1 90c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinfi 91c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 92c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteincd "${progDir}" 93c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan BornsteintestFiles=`/bin/ls libffi.call/*.c` 94c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 95c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinecho "$libDir" 96c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinls "$libDir" 97c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 98c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein# Iterate over all the files, compiling and running each. 99c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 100c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinfor file in $testFiles; do 101c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein echo "${file}..." 102c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein rm -f "$execFile" "$outFile" 103c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein "$CC" -g -I"../${HOST_OS}-${HOST_ARCH}" -o "$execFile" "$file" "$libFile" 104c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein # -L"$libDir" -l"$libName" 105c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein if [ "$?" != "0" ]; then 106c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein echo "compilation failure" 1>&2 107c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein else 108c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein "$execFile" > "$outFile" 109c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein if [ "$?" = "0" ]; then 110c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein echo "${file}: OK" 111c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein else 112c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein echo "${file}: FAIL" 113c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein cat "$outFile" 114c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein fi 115c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein fi 116c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteindone 117c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornstein 118c2b1dd7a596d1accbc3fa0cfea5f96062ec44606Dan Bornsteinrm -f "$execFile" "$outFile" 119