|  | #!/bin/sh | 
|  | # //===--------------------------- testit ---------------------------------===// | 
|  | # // | 
|  | # // The LLVM Compiler Infrastructure | 
|  | # // | 
|  | # // This file is distributed under the University of Illinois Open Source | 
|  | # // License. See LICENSE.TXT for details. | 
|  | # // | 
|  | # //===--------------------------------------------------------------------===// | 
|  |  | 
|  | currentpath=`pwd` | 
|  | origpath=$currentpath | 
|  | currentdir=`basename $currentpath` | 
|  | while [ $currentdir != "test" ]; do | 
|  | if [ $currentdir = "/" ] | 
|  | then | 
|  | echo "current directory must be in or under \"test\"." | 
|  | exit 1 | 
|  | fi | 
|  | cd .. | 
|  | currentpath=`pwd` | 
|  | currentdir=`basename $currentpath` | 
|  | done | 
|  |  | 
|  | cd .. | 
|  | LIBCXX_ROOT=`pwd` | 
|  | cd $origpath | 
|  |  | 
|  | if [ -z "$CC" ] | 
|  | then | 
|  | if which xcrun >/dev/null | 
|  | then | 
|  | CC="xcrun clang++" | 
|  | else | 
|  | CC=clang++ | 
|  | fi | 
|  | fi | 
|  |  | 
|  | if [ -z "$CXX_LANG" ] | 
|  | then | 
|  | CXX_LANG=c++11 | 
|  | fi | 
|  | if [ -z "$OPTIONS" ] | 
|  | then | 
|  | OPTIONS="-std=${CXX_LANG} -stdlib=libc++ -nostdinc++" | 
|  | fi | 
|  | OPTIONS="$OPTIONS -I$LIBCXX_ROOT/test/support" | 
|  |  | 
|  | if [ -z "$HEADER_INCLUDE" ] | 
|  | then | 
|  | HEADER_INCLUDE="-I$LIBCXX_ROOT/include" | 
|  | fi | 
|  |  | 
|  | if [ -z "$SOURCE_LIB" ] | 
|  | then | 
|  | SOURCE_LIB="-L$LIBCXX_ROOT/lib" | 
|  | fi | 
|  |  | 
|  | case $TRIPLE in | 
|  | *-*-mingw* | *-*-cygwin* | *-*-win*) | 
|  | TEST_EXE=test.exe | 
|  | ;; | 
|  | *) | 
|  | TEST_EXE=a.out | 
|  | ;; | 
|  | esac | 
|  |  | 
|  | case $(uname -s) in | 
|  | NetBSD) | 
|  | THREAD_FLAGS=-lpthread | 
|  | ;; | 
|  | esac | 
|  |  | 
|  | FAIL=0 | 
|  | PASS=0 | 
|  | UNIMPLEMENTED=0 | 
|  | IMPLEMENTED_FAIL=0 | 
|  | IMPLEMENTED_PASS=0 | 
|  |  | 
|  | afunc() { | 
|  | fail=0 | 
|  | pass=0 | 
|  | if (ls ${TEST_PREFIX}*fail.cpp > /dev/null 2>&1) | 
|  | then | 
|  | for FILE in $(ls ${TEST_PREFIX}*fail.cpp); do | 
|  | if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE > /dev/null 2>&1 | 
|  | then | 
|  | rm ./$TEST_EXE | 
|  | echo "$FILE should not compile" | 
|  | fail=$(($fail+1)) | 
|  | else | 
|  | pass=$(($pass+1)) | 
|  | fi | 
|  | done | 
|  | fi | 
|  |  | 
|  | if (ls ${TEST_PREFIX}*pass.cpp > /dev/null 2>&1) | 
|  | then | 
|  | for FILE in $(ls ${TEST_PREFIX}*pass.cpp); do | 
|  | if [ "$VERBOSE" ] | 
|  | then | 
|  | echo "Running test: " $FILE | 
|  | fi | 
|  | if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS) -o ./$TEST_EXE | 
|  | then | 
|  | if ./$TEST_EXE | 
|  | then | 
|  | rm ./$TEST_EXE | 
|  | pass=$(($pass+1)) | 
|  | else | 
|  | echo "`pwd`/$FILE failed at run time" | 
|  | echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS) | 
|  | fail=$(($fail+1)) | 
|  | rm ./$TEST_EXE | 
|  | fi | 
|  | else | 
|  | echo "`pwd`/$FILE failed to compile" | 
|  | echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS) | 
|  | fail=$(($fail+1)) | 
|  | fi | 
|  | done | 
|  | fi | 
|  |  | 
|  | if [ $fail -gt 0 ] | 
|  | then | 
|  | echo "failed $fail tests in `pwd`" | 
|  | IMPLEMENTED_FAIL=$(($IMPLEMENTED_FAIL+1)) | 
|  | fi | 
|  | if [ $pass -gt 0 ] | 
|  | then | 
|  | echo "passed $pass tests in `pwd`" | 
|  | if [ $fail -eq 0 ] | 
|  | then | 
|  | IMPLEMENTED_PASS=$((IMPLEMENTED_PASS+1)) | 
|  | fi | 
|  | fi | 
|  | if [ $fail -eq 0 -a $pass -eq 0 ] | 
|  | then | 
|  | echo "not implemented: `pwd`" | 
|  | UNIMPLEMENTED=$(($UNIMPLEMENTED+1)) | 
|  | fi | 
|  |  | 
|  | FAIL=$(($FAIL+$fail)) | 
|  | PASS=$(($PASS+$pass)) | 
|  |  | 
|  | for FILE in * | 
|  | do | 
|  | if [ -d "$FILE" ]; | 
|  | then | 
|  | cd $FILE | 
|  | if [ $FILE = thread -o $1 = yes ]; then | 
|  | afunc yes | 
|  | else | 
|  | afunc no | 
|  | fi | 
|  | cd .. | 
|  | fi | 
|  | done | 
|  | } | 
|  |  | 
|  | afunc no | 
|  |  | 
|  | echo "****************************************************" | 
|  | echo "Results for `pwd`:" | 
|  | echo "using `$CC --version`" | 
|  | echo "with $OPTIONS $HEADER_INCLUDE $SOURCE_LIB" | 
|  | echo "----------------------------------------------------" | 
|  | echo "sections without tests : $UNIMPLEMENTED" | 
|  | echo "sections with failures : $IMPLEMENTED_FAIL" | 
|  | echo "sections without failures: $IMPLEMENTED_PASS" | 
|  | echo " + ----" | 
|  | echo "total number of sections : $(($UNIMPLEMENTED+$IMPLEMENTED_FAIL+$IMPLEMENTED_PASS))" | 
|  | echo "----------------------------------------------------" | 
|  | echo "number of tests failed : $FAIL" | 
|  | echo "number of tests passed : $PASS" | 
|  | echo " + ----" | 
|  | echo "total number of tests : $(($FAIL+$PASS))" | 
|  | echo "****************************************************" | 
|  |  | 
|  | exit $FAIL |