| #!/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" |