#!/bin/sh
#
# We expect warning options for gcc as arguments and return the ones which are
# accepted by the given gcc.
#

set -ue
#set -vx

# make sure we do not use some locale ....
export LANG=C LC_ALL=C LC_COLLATE=C LC_CTYPE=C LC_MESSAGES=C LC_NUMERIC=C

OPTS=""
for param; do
    case "$param" in
    -[fWm]?*) OPTS="$OPTS $param";;
    *)        echo "Ignoring $param" >&2
    esac
done

testcompile() {
    $CC $OPTS -x c -o /dev/null - 2>&1 <<- EOF
       int main(void) {
           return 0;
       }
EOF
}

parsetest() {
    while read error; do 
        case "$error" in
        *ld:\ unrecognized\ *option\ \'*)
            opt="${error#*\'}"
            opt="${opt%\'*}"
            ;;
        *) continue
            ;;
       esac
       # if we come here, we have in $opt the option to remove. and
       # we remove all instances. And we save agoinst leading "-"
       NEW_OPTS=""
       for o in $OPTS; do
           case "$o" in
               -Wl,$opt) : echo "Removed $o" >&2;;
               *)        NEW_OPTS="$NEW_OPTS $o";;
           esac
       done
       OPTS="$NEW_OPTS"
    done
    echo $OPTS
}

testcompile | parsetest

exit 0
