# bash completion for cpack(1)                             -*- shell-script -*-

_cpack()
{
    local cur prev words cword
    _init_completion -n = || return

    case "$prev" in
        -G)
            COMPREPLY=( $( compgen -W '$( cpack --help 2>/dev/null |
                sed -e "1,/^Generators/d" -e "s|^ *\([^ ]*\) .*$|\1|" \
                2>/dev/null )' -- "$cur" ) )
            return
            ;;
        -C)
            COMPREPLY=( $( compgen -W 'Debug Release RelWithDebInfo
                MinSizeRel' -- "$cur" ) )
            return
            ;;
        -D)
            [[ $cur == *=* ]] && return # no completion for values
            COMPREPLY=( $( compgen -W '$( cpack --help-variable-list \
                2>/dev/null | grep -v "^cpack version " )' -S = -- "$cur" ) )
            compopt -o nospace
            return
            ;;
        -P|-R|--vendor)
            # argument required but no completions available
            return
            ;;
        -B)
            _filedir -d
            return
            ;;
        --config)
            _filedir
            return
            ;;
        --help-command)
            COMPREPLY=( $( compgen -W '$( cpack --help-command-list 2>/dev/null|
                grep -v "^cpack version " )' -- "$cur" ) )
            return
            ;;
        --help-variable)
            COMPREPLY=( $( compgen -W '$( cpack --help-variable-list \
                2>/dev/null | grep -v "^cpack version " )' -- "$cur" ) )
            return
            ;;
    esac

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $(compgen -W '$( _parse_help "$1" --help )' -- ${cur}) )
        [[ $COMPREPLY == *= ]] && compopt -o nospace
        [[ $COMPREPLY ]] && return
    fi

    _filedir
} &&
complete -F _cpack cpack

# ex: ts=4 sw=4 et filetype=sh
