123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- # bash completion for cmake(1) -*- shell-script -*-
- _cmake()
- {
- local cur prev words cword split=false
- if type -t _init_completion >/dev/null; then
- _init_completion -n = || return
- else
- # manual initialization for older bash completion versions
- COMPREPLY=()
- cur="${COMP_WORDS[COMP_CWORD]}"
- prev="${COMP_WORDS[COMP_CWORD-1]}"
- fi
- # Workaround for options like -DCMAKE_BUILD_TYPE=Release
- local prefix=
- if [[ $cur == -D* ]]; then
- prev=-D
- prefix=-D
- cur="${cur#-D}"
- elif [[ $cur == -U* ]]; then
- prev=-U
- prefix=-U
- cur="${cur#-U}"
- fi
- case "$prev" in
- -D)
- if [[ $cur == *=* ]]; then
- # complete values for variables
- local var type value
- var="${cur%%[:=]*}"
- value="${cur#*=}"
- if [[ $cur == CMAKE_BUILD_TYPE* ]]; then # most widely used case
- COMPREPLY=( $( compgen -W 'Debug Release RelWithDebInfo
- MinSizeRel' -- "$value" ) )
- return
- fi
- if [[ $cur == *:* ]]; then
- type="${cur#*:}"
- type="${type%%=*}"
- else # get type from cache if it's not set explicitly
- type=$( cmake -LA -N 2>/dev/null | grep "$var:" \
- 2>/dev/null )
- type="${type#*:}"
- type="${type%%=*}"
- fi
- case "$type" in
- FILEPATH)
- cur="$value"
- _filedir
- return
- ;;
- PATH)
- cur="$value"
- _filedir -d
- return
- ;;
- BOOL)
- COMPREPLY=( $( compgen -W 'ON OFF TRUE FALSE' -- \
- "$value" ) )
- return
- ;;
- STRING|INTERNAL)
- # no completion available
- return
- ;;
- esac
- elif [[ $cur == *:* ]]; then
- # complete types
- local type="${cur#*:}"
- COMPREPLY=( $( compgen -W 'FILEPATH PATH STRING BOOL INTERNAL'\
- -S = -- "$type" ) )
- compopt -o nospace
- else
- # complete variable names
- COMPREPLY=( $( compgen -W '$( cmake -LA -N 2>/dev/null |
- tail -n +2 | cut -f1 -d: )' -P "$prefix" -- "$cur" ) )
- compopt -o nospace
- fi
- return
- ;;
- -U)
- COMPREPLY=( $( compgen -W '$( cmake -LA -N | tail -n +2 |
- cut -f1 -d: )' -P "$prefix" -- "$cur" ) )
- return
- ;;
- esac
- _split_longopt && split=true
- case "$prev" in
- -C|-P|--graphviz|--system-information)
- _filedir
- return
- ;;
- --build|--install|--open)
- _filedir -d
- return
- ;;
- -E)
- COMPREPLY=( $( compgen -W "$( cmake -E help |& sed -n \
- '/^ [^ ]/{s|^ \([^ ]\{1,\}\) .*$|\1|;p}' 2>/dev/null )" \
- -- "$cur" ) )
- return
- ;;
- -G)
- local IFS=$'\n'
- local quoted
- printf -v quoted %q "$cur"
- COMPREPLY=( $( compgen -W '$( cmake --help 2>/dev/null | sed -n \
- -e "1,/^Generators/d" \
- -e "/^ *[^ =]/{s|^ *\([^=]*[^ =]\).*$|\1|;s| |\\\\ |g;p}" \
- 2>/dev/null )' -- "$quoted" ) )
- return
- ;;
- --loglevel)
- COMPREPLY=( $(compgen -W 'error warning notice status verbose debug trace' -- $cur ) )
- ;;
- --help-command)
- COMPREPLY=( $( compgen -W '$( cmake --help-command-list 2>/dev/null|
- grep -v "^cmake version " )' -- "$cur" ) )
- return
- ;;
- --help-manual)
- COMPREPLY=( $( compgen -W '$( cmake --help-manual-list 2>/dev/null|
- grep -v "^cmake version " | sed -e "s/([0-9])$//" )' -- "$cur" ) )
- return
- ;;
- --help-module)
- COMPREPLY=( $( compgen -W '$( cmake --help-module-list 2>/dev/null|
- grep -v "^cmake version " )' -- "$cur" ) )
- return
- ;;
- --help-policy)
- COMPREPLY=( $( compgen -W '$( cmake --help-policy-list 2>/dev/null |
- grep -v "^cmake version " )' -- "$cur" ) )
- return
- ;;
- --help-property)
- COMPREPLY=( $( compgen -W '$( cmake --help-property-list \
- 2>/dev/null | grep -v "^cmake version " )' -- "$cur" ) )
- return
- ;;
- --help-variable)
- COMPREPLY=( $( compgen -W '$( cmake --help-variable-list \
- 2>/dev/null | grep -v "^cmake version " )' -- "$cur" ) )
- return
- ;;
- esac
- $split && return
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $(compgen -W '$( _parse_help "$1" --help )' -- ${cur}) )
- [[ $COMPREPLY == *= ]] && compopt -o nospace
- [[ $COMPREPLY ]] && return
- fi
- _filedir
- } &&
- complete -F _cmake cmake
- # ex: ts=4 sw=4 et filetype=sh
|