]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Make test suite work with clang and gcc-llvm on Mac OS X
authorDavid Givone <david@givone.net>
Tue, 4 Sep 2012 03:57:00 +0000 (20:57 -0700)
committerJoel Rosdahl <joel@rosdahl.net>
Thu, 13 Sep 2012 18:35:57 +0000 (20:35 +0200)
Numerous fixes so that clang and gcc-llvm from Xcode 4 can successfully
complete

Various variables were also added to simplify conditional statements.

test.sh

diff --git a/test.sh b/test.sh
index f1362f814d67ec5fff021302f5567350d800fb1e..d0eaad12de8a814b2c23712a1723b4b950a7c307 100755 (executable)
--- a/test.sh
+++ b/test.sh
@@ -208,7 +208,7 @@ base_tests() {
     testname="non-regular"
     mkdir testd
     $CCACHE_COMPILE -o testd -c test1.c > /dev/null 2>&1
-    rmdir testd
+    rmdir testd > /dev/null 2>&1
     checkstat 'output to a non-regular file' 1
 
     testname="no-input"
@@ -521,7 +521,16 @@ EOF
     $CCACHE -C > /dev/null
     checkstat 'files in cache' 0
 
-    if $COMPILER -c -fprofile-generate test1.c 2>/dev/null; then
+    # the profile options do not seem to work correctly with clang or gcc-llvm
+    # on darwin machines
+    darwin_llvm=0
+    if [ $HOST_OS_APPLE -eq 1 ] && \
+        [ $COMPILER_USES_LLVM -eq 1 ]; then
+        darwin_llvm=1
+    fi
+
+    $COMPILER -c -fprofile-generate test1.c 2>/dev/null
+    if [ $? -eq 0 ] && [ $darwin_llvm -eq 0 ]; then
         testname="profile-generate"
         $CCACHE -Cz > /dev/null
         $CCACHE_COMPILE -c -fprofile-generate test1.c
@@ -777,31 +786,37 @@ EOF
 
     ##################################################################
     # Check that -Wp,-MD,file.d,-P disables direct mode.
-    testname="-Wp,-MD,file.d,-P"
-    $CCACHE -z >/dev/null
-    $CCACHE $COMPILER -c -Wp,-MD,$DEVNULL,-P test.c
-    checkstat 'cache hit (direct)' 0
-    checkstat 'cache hit (preprocessed)' 0
-    checkstat 'cache miss' 1
+    # currently clang does not support -Wp form of options
+    if [ $COMPILER_TYPE_GCC -eq 1 ]; then
+        testname="-Wp,-MD,file.d,-P"
+        $CCACHE -z >/dev/null
+        $CCACHE $COMPILER -c -Wp,-MD,$DEVNULL,-P test.c
+        checkstat 'cache hit (direct)' 0
+        checkstat 'cache hit (preprocessed)' 0
+        checkstat 'cache miss' 1
 
-    $CCACHE $COMPILER -c -Wp,-MD,$DEVNULL,-P test.c
-    checkstat 'cache hit (direct)' 0
-    checkstat 'cache hit (preprocessed)' 1
-    checkstat 'cache miss' 1
+        $CCACHE $COMPILER -c -Wp,-MD,$DEVNULL,-P test.c
+        checkstat 'cache hit (direct)' 0
+        checkstat 'cache hit (preprocessed)' 1
+        checkstat 'cache miss' 1
+    fi
 
     ##################################################################
     # Check that -Wp,-MMD,file.d,-P disables direct mode.
-    testname="-Wp,-MDD,file.d,-P"
-    $CCACHE -z >/dev/null
-    $CCACHE $COMPILER -c -Wp,-MMD,$DEVNULL,-P test.c
-    checkstat 'cache hit (direct)' 0
-    checkstat 'cache hit (preprocessed)' 0
-    checkstat 'cache miss' 1
+    # currently clang does not support -Wp form of options
+    if [ $COMPILER_TYPE_GCC -eq 1 ]; then
+        testname="-Wp,-MDD,file.d,-P"
+        $CCACHE -z >/dev/null
+        $CCACHE $COMPILER -c -Wp,-MMD,$DEVNULL,-P test.c
+        checkstat 'cache hit (direct)' 0
+        checkstat 'cache hit (preprocessed)' 0
+        checkstat 'cache miss' 1
 
-    $CCACHE $COMPILER -c -Wp,-MMD,$DEVNULL,-P test.c
-    checkstat 'cache hit (direct)' 0
-    checkstat 'cache hit (preprocessed)' 1
-    checkstat 'cache miss' 1
+        $CCACHE $COMPILER -c -Wp,-MMD,$DEVNULL,-P test.c
+        checkstat 'cache hit (direct)' 0
+        checkstat 'cache hit (preprocessed)' 1
+        checkstat 'cache miss' 1
+    fi
 
     ##################################################################
     # Test some header modifications to get multiple objects in the manifest.
@@ -1249,7 +1264,37 @@ EOF
     $CCACHE --dump-manifest $manifest |
         perl -ape 's/:.*/: normalized/ if $F[0] =~ "(Hash|Size):" and ++$n > 6' \
         >manifest.dump
-    cat <<EOF >expected.dump
+    if [ $COMPILER_TYPE_CLANG -eq 1 ]; then
+        cat <<EOF >expected.dump
+Magic: cCmF
+Version: 0
+Hash size: 16
+Reserved field: 0
+File paths (3):
+  0: ./test3.h
+  1: ./test1.h
+  2: ./test2.h
+File infos (3):
+  0:
+    Path index: 0
+    Hash: c2f5392dbc7e8ff6138d01608445240a
+    Size: 24
+  1:
+    Path index: 1
+    Hash: e6b009695d072974f2c4d1dd7e7ed4fc
+    Size: 95
+  2:
+    Path index: 2
+    Hash: e94ceb9f1b196c387d098a5f1f4fe862
+    Size: 11
+Results (1):
+  0:
+    File hash indexes: 0 1 2
+    Hash: normalized
+    Size: normalized
+EOF
+    else
+        cat <<EOF >expected.dump
 Magic: cCmF
 Version: 0
 Hash size: 16
@@ -1277,6 +1322,8 @@ Results (1):
     Hash: normalized
     Size: normalized
 EOF
+    fi
+
     if diff expected.dump manifest.dump; then
         :
     else
@@ -1951,9 +1998,21 @@ if [ -z "$CCACHE" ]; then
     CCACHE=`pwd`/ccache
 fi
 
+
+# save the type of compiler because some test may not work on all compilers
+COMPILER_TYPE_CLANG=0
+COMPILER_TYPE_GCC=0
+
+COMPILER_USES_LLVM=0
+HOST_OS_APPLE=0
+
 compiler_version="`$COMPILER --version 2>&1 | head -1`"
 case $compiler_version in
-    *gcc*|2.95*)
+    *gcc*|*g++*|2.95*)
+        COMPILER_TYPE_GCC=1
+        ;;
+    *clang*)
+        COMPILER_TYPE_CLANG=1
         ;;
     *)
         echo "WARNING: Compiler $COMPILER not supported (version: $compiler_version) -- not running tests" >&2
@@ -1961,6 +2020,20 @@ case $compiler_version in
         ;;
 esac
 
+case $compiler_version in
+    *llvm*|*LLVM*)
+        COMPILER_USES_LLVM=1
+        ;;
+esac
+
+host_os="`uname -s`"
+case $host_os in
+    *Darwin*)
+        HOST_OS_APPLE=1
+        ;;
+esac
+
+
 TESTDIR=testdir.$$
 rm -rf $TESTDIR
 mkdir $TESTDIR
@@ -1994,7 +2067,6 @@ upgrade
 prefix
 "
 
-host_os="`uname -s`"
 case $host_os in
     *MINGW*|*mingw*)
         export CCACHE_DETECT_SHEBANG