#! /bin/bash

usage()
{
    echo "usage: $0 {get | set <version>}"
    exit 1
}


set +x
if [[ $# < 1 ]]
then
    usage
fi

version_str='__version__ ='

case "$1" in
    get)
        (
        for f in $(find src tools -type f -exec grep -l "$version_str" {} \;)
        do
            echo -n "$f: "
            grep "$version_str" $f
        done
        echo -n "setup.py: "
        grep version setup.py
        ) | awk "
            BEGIN { FS = \"[=:]+\"; max=-1 };
            { gsub(/[,' ]+/, \"\", \$NF); files[NR]=\$1; v=\$NF; versions[NR]=v; if (v > max) max=v;}
            END {
                for (i in files) {
                    if (versions[i] == max) {
                        s=\" MAX\"
                    } else {
                        s = \"\"};
                    printf(\"%-45s: %s%s\\n\", files[i], versions[i], s)};
            }
            "
        ;;

    set)
        if [[ $# != 2 ]]
        then
            usage
        fi
        version="$2"
        for f in $(find src tools -type f -exec grep -l "$version_str" {} \;)
        do
            echo "<<< $f >>>"
            case "$(uname)" in
                Darwin)
                    sed -E -i '' -e "s@$version_str \'[0-9r.]+\'@$version_str \'$version\'@" $f
                    ;;

                Linux)
                    sed -E -i -e "s@$version_str '[0-9r.]+'@$version_str '$version'@" $f
                    ;;
            esac
        done

        echo "<<< setup.py >>>"
        case "$(uname)" in
            Darwin)
                sed -E -i '' -e "s@version='[0-9r.]+'@version='$version'@" setup.py
                ;;

            Linux)
                sed -E -i -e "s@version='[0-9r.]+'@version='$version'@" setup.py
                ;;
        esac
        ;;
 esac
