blob: 1d4b9569ccaa684c1e09900b9e5cdf8494461a99 [file] [log] [blame]
#!/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"