make flag testing work for clang too crbug.com/474652
authorMike Frysinger <vapier@gentoo.org>
Wed, 6 May 2015 07:04:53 +0000 (07:04 +0000)
committerMike Frysinger <vapier@gentoo.org>
Wed, 6 May 2015 07:04:53 +0000 (07:04 +0000)
eclass/flag-o-matic.eclass
eclass/tests/flag-o-matic.sh

index 5ede6bf8c50a2da8208f782334f82ce13f46487a..f5919cccf2bd26c7b9641bcfb97861c298c3c818 100644 (file)
@@ -1,6 +1,6 @@
 # Copyright 1999-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/flag-o-matic.eclass,v 1.204 2014/12/31 08:26:48 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/flag-o-matic.eclass,v 1.205 2015/05/06 07:04:53 vapier Exp $
 
 # @ECLASS: flag-o-matic.eclass
 # @MAINTAINER:
@@ -415,13 +415,18 @@ test-flag-PROG() {
 
        [[ -z ${comp} || -z ${flag} ]] && return 1
 
-       # use -c so we can test the assembler as well
-       local PROG=$(tc-get${comp})
-       if ${PROG} -c -o /dev/null -x${lang} - < /dev/null > /dev/null 2>&1 ; then
-               ${PROG} "${flag}" -c -o /dev/null -x${lang} - < /dev/null \
-                       > /dev/null 2>&1
+       local cmdline=(
+               $(tc-get${comp})
+               # Clang will warn about unknown gcc flags but exit 0.
+               # Need -Werror to force it to exit non-zero.
+               -Werror
+               # Use -c so we can test the assembler as well.
+               -c -o /dev/null
+       )
+       if "${cmdline[@]}" -x${lang} - </dev/null >/dev/null 2>&1 ; then
+               "${cmdline[@]}" "${flag}" -x${lang} - </dev/null >/dev/null 2>&1
        else
-               ${PROG} "${flag}" -c -o /dev/null /dev/null > /dev/null 2>&1
+               "${cmdline[@]}" "${flag}" -c -o /dev/null /dev/null >/dev/null 2>&1
        fi
 }
 
index 7fd0182260e3fc05ecfe39180ff14e611cf928e7..5132c319f401165cc4925be1a9213aeefa216c80 100755 (executable)
@@ -116,4 +116,31 @@ LDFLAGS=$(raw-ldflags)
 [[ ${LDFLAGS} == '-O1 --as-needed -z now' ]]
 ftend
 
+tbegin "test-flags-CC (valid flags)"
+out=$(test-flags-CC -O3)
+[[ $? -eq 0 && ${out} == "-O3" ]]
+ftend
+
+tbegin "test-flags-CC (invalid flags)"
+out=$(test-flags-CC -finvalid-flag)
+[[ $? -ne 0 && -z ${out} ]]
+ftend
+
+if type -P clang >/dev/null ; then
+tbegin "test-flags-CC (valid flags w/clang)"
+out=$(CC=clang test-flags-CC -O3)
+[[ $? -eq 0 && ${out} == "-O3" ]]
+ftend
+
+tbegin "test-flags-CC (invalid flags w/clang)"
+out=$(CC=clang test-flags-CC -finvalid-flag)
+[[ $? -ne 0 && -z ${out} ]]
+ftend
+
+tbegin "test-flags-CC (gcc-valid but clang-invalid flags)"
+out=$(CC=clang test-flags-CC -finline-limit=1200)
+[[ $? -ne 0 && -z ${out} ]]
+ftend
+fi
+
 texit