Fix strange coding in the 'long headers' fix
[olsrd.git] / ld-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         *ld:\ unrecognized\ *option\ \'*)
33             opt="${error#*\'}"
34             opt="${opt%\'*}"
35             ;;
36         *) continue
37             ;;
38        esac
39        # if we come here, we have in $opt the option to remove. and
40        # we remove all instances. And we save agoinst leading "-"
41        NEW_OPTS=""
42        for o in $OPTS; do
43            case "$o" in
44                -Wl,$opt) : echo "Removed $o" >&2;;
45                *)        NEW_OPTS="$NEW_OPTS $o";;
46            esac
47        done
48        OPTS="$NEW_OPTS"
49     done
50     echo $OPTS
51 }
52
53 testcompile | parsetest
54
55 exit 0