#!/bin/bash # # Copyright 2009 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. # # Script to run all the tests, which only works for host builds. This # uses some heuristics to navigate the source tree and built output, # and it won't be too surprising if this breaks with some change in # the build system. # libName="libffi-host" execFile="/tmp/run-test-$$" outFile="/tmp/out-test-$$.txt" # Set up prog to be the path of this script, including following symlinks, # and set up progdir to be the fully-qualified pathname of its directory. prog="$0" while [ -h "${prog}" ]; do newProg=`/bin/ls -ld "${prog}"` newProg=`expr "${newProg}" : ".* -> \(.*\)$"` if expr "x${newProg}" : 'x/' >/dev/null; then prog="${newProg}" else progdir=`dirname "${prog}"` prog="${progdir}/${newProg}" fi done origDir=`pwd` progDir=`dirname "${prog}"` cd "${progDir}" progDir=`pwd` prog="${progDir}"/`basename "${prog}"` # Find the base directory of the source tree (which is expected to be # the first directory found up the tree that contains both an out and # a build directory). while true; do if [ -d out -a -d build ]; then break; fi cd .. if [ "x`pwd`" = "x/" ]; then echo "could not find top of source tree" 1>&2 exit 1 fi done sourceDir=`pwd` # Find the library, collect the list of test files, and set other variables. if get_build_var x >/dev/null 2>&1; then : # Already have build system defs. else # Pull in envsetup.sh. . build/envsetup.sh fi CC=`get_build_var CC` HOST_OS=`get_build_var HOST_OS` HOST_ARCH=`get_build_var HOST_ARCH` # All this is to make the libFile be an absolute path. libFile=`find out/host/${HOST_OS}-${HOST_ARCH} -name "${libName}.a" | head -1` libDir=`dirname ${libFile}` libDir=`cd "$libDir"; pwd` libFile="${libDir}/${libName}.a" if [ "x$libFile" = "x" ]; then echo "could not find ${libName}" 1>&2 exit 1 fi cd "${progDir}" testFiles=`/bin/ls libffi.call/*.c` echo "$libDir" ls "$libDir" # Iterate over all the files, compiling and running each. for file in $testFiles; do echo "${file}..." rm -f "$execFile" "$outFile" "$CC" -g -I"../${HOST_OS}-${HOST_ARCH}" -o "$execFile" "$file" "$libFile" # -L"$libDir" -l"$libName" if [ "$?" != "0" ]; then echo "compilation failure" 1>&2 else "$execFile" > "$outFile" if [ "$?" = "0" ]; then echo "${file}: OK" else echo "${file}: FAIL" cat "$outFile" fi fi done rm -f "$execFile" "$outFile"