config.tests/unix/fvisibility.test
changeset 0 1918ee327afb
child 30 5dc02b23752f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config.tests/unix/fvisibility.test	Mon Jan 11 14:00:40 2010 +0000
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+FVISIBILITY_SUPPORT=no
+COMPILER=$1
+VERBOSE=$2
+
+RunCompileTest() {
+    cat >>fvisibility.c << EOF
+__attribute__((visibility("default"))) void blah();
+#if !defined(__GNUC__)
+# error "Visiblility support requires GCC"
+#elif __GNUC__ < 4
+# error "GCC3 with backported visibility patch is known to miscompile Qt"
+#endif
+EOF
+
+    if [ "$VERBOSE" = "yes" ] ; then
+        "$COMPILER" -c -fvisibility=hidden fvisibility.c && FVISIBILITY_SUPPORT=yes
+    else
+        "$COMPILER" -c -fvisibility=hidden fvisibility.c >/dev/null 2>&1 && FVISIBILITY_SUPPORT=yes
+    fi
+    rm -f fvisibility.c fvisibility.o
+}
+
+case "$COMPILER" in
+aCC*)
+    ;;
+
+icpc)
+    ICPC_VERSION=`icpc -dumpversion`
+    case "$ICPC_VERSION" in
+    8.*|9.*|10.0)
+        # 8.x, 9.x, and 10.0 don't support symbol visibility
+        ;;
+    *)
+        # the compile test works for the intel compiler because it mimics gcc's behavior
+        RunCompileTest
+        ;;
+    esac
+    ;;
+
+    *)
+    RunCompileTest
+    ;;
+esac
+
+# done
+if [ "$FVISIBILITY_SUPPORT" != "yes" ]; then
+    [ "$VERBOSE" = "yes" ] && echo "Symbol visibility control disabled."
+    exit 0
+else
+    [ "$VERBOSE" = "yes" ] && echo "Symbol visibility control enabled."
+    exit 1
+fi