make: add more recognised formats to the gcc-warnings script
[olsrd.git] / gcc-warnings
1 #!/bin/sh
2 #
3 # We expect warning options for gcc as arguments and return the ones which are
4 # accepted by the given gcc.
5 #
6
7 set -ue
8 #set -vx
9
10 # make sure we do not use some locale ....
11 export LANG=C LC_ALL=C LC_COLLATE=C LC_CTYPE=C LC_MESSAGES=C LC_NUMERIC=C
12
13 OPTS=""
14 for param; do
15     case "$param" in
16     -[fWm]?*) OPTS="$OPTS $param";;
17     *)        echo "Ignoring $param" >&2
18     esac
19 done
20
21 testcompile() {
22     $CC $OPTS -x c -o /dev/null - 2>&1 <<- EOF
23        int main(void) {
24            return 0;
25        }
26 EOF
27 }
28
29 parsetest() {
30     while read error; do 
31         case "$error" in
32         *:\ unrecognized\ *option\ \"*)
33             opt="${error#*\"}"
34             opt="${opt%\"*}"
35             ;;
36         *:\ unrecognized\ *option\ \‘*)
37             opt="${error#*\‘}"
38             opt="${opt%\‘*}"
39             ;;
40         *:\ unrecognized\ *option\ \'*)
41             opt="${error#*\'}"
42             opt="${opt%\'*}"
43             ;;
44         *:\ unrecognized\ *option\ \`*)
45             opt="${error#*\`}"
46             opt="${opt%\'*}"
47             ;;
48         *) continue
49             ;;
50        esac
51        # if we come here, we have in $opt the option to remove. and
52        # we remove all instances. And we save against leading "-"
53        NEW_OPTS=""
54        for o in $OPTS; do
55            case "$o" in
56                $opt) : echo "Removed $o" >&2;;
57                *)    NEW_OPTS="$NEW_OPTS $o";;
58            esac
59        done
60        OPTS="$NEW_OPTS"
61     done
62     echo $OPTS
63 }
64
65 testcompile | parsetest
66
67 exit 0