lib/pvl/main.sh
author Tero Marttila <tero.marttila@aalto.fi>
Thu, 26 Feb 2015 21:38:09 +0200
changeset 627 a81206440be2
child 628 b10ad946d01d
permissions -rw-r--r--
(none)
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     1
set -ue
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     2
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     3
shopt -s globstar nullglob
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     4
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     5
. $LIB/pvl/util.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     6
. $LIB/pvl/cmd.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     7
. $LIB/pvl/log.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     8
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     9
function main_help {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    10
    cat <<END
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    11
Usage: $0 [options]
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    12
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    13
General:
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    14
    -h      display this help text
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    15
END
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    16
    
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    17
    for module in ${MODULES[@]}; do
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    18
        ${module}_help
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    19
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    20
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    21
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    22
function main_opts {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    23
    local module=
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    24
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    25
    # build opts string
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    26
    local opts=$(
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    27
        echo -n 'h'
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    28
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    29
        for module in ${MODULES[@]}; do
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    30
            module_getopts=${module}_GETOPTS
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    31
            echo -n ${!module_getopts}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    32
        done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    33
    )
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    34
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    35
    local OPTIND
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    36
    while getopts "$opts" opt; do
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    37
        local opt_module=
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    38
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    39
        if [ "$opt" = 'h' ]; then
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    40
            main_help
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    41
            exit 0;
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    42
        fi
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    43
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    44
        for module in ${MODULES[@]}; do
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    45
            if ${module}_opt $opt "${OPTARG:-}"; then
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    46
                opt_module=$module
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    47
            fi
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    48
        done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    49
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    50
        if [ "$opt_module" ]; then
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    51
            continue
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    52
        else
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    53
            die "opt: $opt"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    54
        fi
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    55
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    56
    shift $(($OPTIND - 1))
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    57
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    58
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    59
function main {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    60
    local module=
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    61
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    62
    main_opts "$@"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    63
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    64
    for module in ${MODULES[@]}; do
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    65
        func_test ${module}_init && ${module}_init
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    66
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    67
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    68
    ${MODULE}_main     
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    69
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    70