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