summaryrefslogtreecommitdiffstats
path: root/Docs
diff options
context:
space:
mode:
authorEric NOULARD <eric.noulard@gmail.com>2012-04-22 17:08:29 (GMT)
committerEric NOULARD <eric.noulard@gmail.com>2012-04-23 18:46:08 (GMT)
commit5b97942cbb915e8eaff0b5b9fee0676296656c93 (patch)
tree2bef7e23ab8f6aa7903f8cedebd9a9a094e2d6e7 /Docs
parent3a503926018fd10ef2120e2c1b98e93afb4fd0c1 (diff)
downloadCMake-5b97942cbb915e8eaff0b5b9fee0676296656c93.zip
CMake-5b97942cbb915e8eaff0b5b9fee0676296656c93.tar.gz
CMake-5b97942cbb915e8eaff0b5b9fee0676296656c93.tar.bz2
Enhancement of bash completion scripts given by Igor Murzov.
The orginal patch has been reworked in order to follow CMake source tree layout habit. Inspired-By: Igor Murzov <e-mail@date.by>
Diffstat (limited to 'Docs')
-rw-r--r--Docs/CMakeLists.txt2
-rw-r--r--Docs/bash-completion/CMakeLists.txt8
-rw-r--r--Docs/bash-completion/cmake149
-rw-r--r--Docs/bash-completion/cpack61
-rw-r--r--Docs/bash-completion/ctest81
-rw-r--r--Docs/cmake-completion207
6 files changed, 301 insertions, 207 deletions
diff --git a/Docs/CMakeLists.txt b/Docs/CMakeLists.txt
new file mode 100644
index 0000000..0848fef
--- /dev/null
+++ b/Docs/CMakeLists.txt
@@ -0,0 +1,2 @@
+string(REGEX REPLACE "^/(.*)" "\\1" REL_CMAKE_DATA_DIR "${CMAKE_DATA_DIR}")
+ADD_SUBDIRECTORY (bash-completion)
diff --git a/Docs/bash-completion/CMakeLists.txt b/Docs/bash-completion/CMakeLists.txt
new file mode 100644
index 0000000..592b71e
--- /dev/null
+++ b/Docs/bash-completion/CMakeLists.txt
@@ -0,0 +1,8 @@
+# Always install completion file in local dir
+# in order to be sure to always be able to install
+# in a local user directory rooted in a single directory.
+# packager should either patch that out or
+# add symlinks to the files in appropriate places
+# /etc/bash_completion.d/
+# DATADIR/completions (may be /usr/share/<package>/completions
+install(FILES cmake cpack ctest DESTINATION ${REL_CMAKE_DATA_DIR}/completions)
diff --git a/Docs/bash-completion/cmake b/Docs/bash-completion/cmake
new file mode 100644
index 0000000..59b565a
--- /dev/null
+++ b/Docs/bash-completion/cmake
@@ -0,0 +1,149 @@
+# bash completion for cmake(1) -*- shell-script -*-
+
+_cmake()
+{
+ local cur prev words cword split=false
+ _init_completion -n := || return
+
+ # 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 | 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)
+ _filedir -d
+ return
+ ;;
+ -E)
+ COMPREPLY=( $( compgen -W "$( cmake -E help |& sed -n \
+ '/^ /{s|^ \([^ ]\{1,\}\) .*$|\1|;p}' 2>/dev/null )" \
+ -- "$cur" ) )
+ return
+ ;;
+ -G)
+ # FIXME: doesn't work properly
+ local IFS=$'\n'
+ COMPREPLY=( $( compgen -W '$( cmake --help 2>/dev/null | sed -n \
+ "/^.*[^ ].*= Generates/{s|^ *\(.*[^ ]\) *= Generates.*$|\1|;s| |\\\\ |g;p}" \
+ 2>/dev/null )' -- "$cur" ) )
+ return
+ ;;
+ --help-command)
+ COMPREPLY=( $( compgen -W '$( cmake --help-command-list 2>/dev/null|
+ tail -n +2 )' -- "$cur" ) )
+ return
+ ;;
+ --help-module)
+ COMPREPLY=( $( compgen -W '$( cmake --help-module-list 2>/dev/null|
+ tail -n +2 )' -- "$cur" ) )
+ return
+ ;;
+ --help-policy)
+ COMPREPLY=( $( compgen -W '$( cmake --help-policies 2>/dev/null |
+ grep "^ CMP" 2>/dev/null )' -- "$cur" ) )
+ return
+ ;;
+ --help-property)
+ COMPREPLY=( $( compgen -W '$( cmake --help-property-list \
+ 2>/dev/null | tail -n +2 )' -- "$cur" ) )
+ return
+ ;;
+ --help-variable)
+ COMPREPLY=( $( compgen -W '$( cmake --help-variable-list \
+ 2>/dev/null | tail -n +2 )' -- "$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
diff --git a/Docs/bash-completion/cpack b/Docs/bash-completion/cpack
new file mode 100644
index 0000000..84dcfd5
--- /dev/null
+++ b/Docs/bash-completion/cpack
@@ -0,0 +1,61 @@
+# 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 |
+ grep "^ .*=\ .*" 2> /dev/null | grep -v "^ -" 2>/dev/null |
+ cut -d" " -f 3 )' -- "$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 | tail -n +2 )' -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|
+ tail -n +2 )' -- "$cur" ) )
+ return
+ ;;
+ --help-variable)
+ COMPREPLY=( $( compgen -W '$( cpack --help-variable-list \
+ 2>/dev/null | tail -n +2 )' -- "$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
diff --git a/Docs/bash-completion/ctest b/Docs/bash-completion/ctest
new file mode 100644
index 0000000..9707f62
--- /dev/null
+++ b/Docs/bash-completion/ctest
@@ -0,0 +1,81 @@
+# bash completion for ctest(1) -*- shell-script -*-
+
+_ctest()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ case "$prev" in
+ -C|--build-config)
+ COMPREPLY=( $( compgen -W 'Debug Release RelWithDebInfo
+ MinSizeRel' -- "$cur" ) )
+ return
+ ;;
+ -j|--parallel)
+ COMPREPLY=( $( compgen -W "{1..$(( $(_ncpus)*2 ))}" -- "$cur" ) )
+ return
+ ;;
+ -O|--output-log|-A|--add-notes|--extra-submit)
+ _filedir
+ return
+ ;;
+ -L|--label-regex|-LE|--label-exclude|--track|-I|--tests-information|\
+ --max-width|--timeout|--stop-time)
+ # argument required but no completions available
+ return
+ ;;
+ -R|--tests-regex|-E|--exclude-regex)
+ COMPREPLY=( $( compgen -W '$( ctest -N 2>/dev/null |
+ grep "^ Test" 2>/dev/null | cut -d: -f 2 )' -- "$cur" ) )
+ return
+ ;;
+ -D|--dashboard)
+ if [[ $cur == @(Experimental|Nightly|Continuous)* ]]; then
+ local model action
+ action=${cur#@(Experimental|Nightly|Continuous)}
+ model=${cur%"$action"}
+ COMPREPLY=( $( compgen -W 'Start Update Configure Build Test
+ Coverage Submit MemCheck' -P "$model" -- "$action" ) )
+ else
+ COMPREPLY=( $( compgen -W 'Experimental Nightly Continuous' \
+ -- "$cur" ) )
+ compopt -o nospace
+ fi
+ return
+ ;;
+ -M|--test-model)
+ COMPREPLY=( $( compgen -W 'Experimental Nightly Continuous' -- \
+ "$cur" ) )
+ return
+ ;;
+ -T|--test-action)
+ COMPREPLY=( $( compgen -W 'Start Update Configure Build Test
+ Coverage Submit MemCheck' -- "$cur" ) )
+ return
+ ;;
+ -S|--script|-SP|--script-new-process)
+ # FIXME ?
+ return
+ ;;
+ --interactive-debug-mode)
+ COMPREPLY=( $( compgen -W '0 1' -- "$cur" ) )
+ return
+ ;;
+ --help-command)
+ COMPREPLY=( $( compgen -W '$( ctest --help-command-list 2>/dev/null|
+ tail -n +2 )' -- "$cur" ) )
+ return
+ ;;
+ esac
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $(compgen -W '$( _parse_help "$1" --help )' -- ${cur}) )
+ [[ $COMPREPLY == *= ]] && compopt -o nospace
+ [[ $COMPREPLY ]] && return
+ fi
+
+ _filedir
+} &&
+complete -F _ctest ctest
+
+# ex: ts=4 sw=4 et filetype=sh
diff --git a/Docs/cmake-completion b/Docs/cmake-completion
deleted file mode 100644
index d70ac24..0000000
--- a/Docs/cmake-completion
+++ /dev/null
@@ -1,207 +0,0 @@
-#
-# bash-completion file for CMake
-# Provided by Eric NOULARD - eric.noulard@gmail.com
-#
-# see http://bash-completion.alioth.debian.org/
-# and http://www.cmake.org
-#
-# We will try to complete cmake commands options
-# at 2 (or may be 3 levels)
-# [cmake|cpack|ctest] <level0> <level1> <level2>
-#
-# level0 is top level cmake/cpack/ctest options
-# level1 is the first argument of level0 option
-# level2 is the seconf argument of level1 argument
-# FIXME: I don't know how to handle level2
-#
-# The file has been proposed for inclusion in the bash-completion package
-# https://alioth.debian.org/tracker/?func=detail&atid=413095&aid=312632&group_id=100114
-# In the meantime,
-# 1) If you want to test bash completion for cmake/cpack/ctest
-# just source the current file at bash prompt
-# . ./cmake-completion
-#
-# 2) If you want to install it for good copy this file to
-# cp cmake-completion /etc/bash_completion.d/cmake
-#
-
-#
-# cmake command
-#
-# have cmake &&
-_cmake()
-{
- local cur prev opts words cword
- COMPREPLY=()
- cur="${COMP_WORDS[COMP_CWORD]}"
- prev="${COMP_WORDS[COMP_CWORD-1]}"
- # seems to be only available on bash-completion 1.2
- #_get_comp_words_by_ref cur prev
-
- # cmake command line option we want to complete
- opts=`cmake --help | grep "^ \-.*=\ .*" | cut -d" " -f 3 | cut -d= -f 1 | cut -d[ -f 1`
-
- #
- # Complete the arguments to some of
- # the most commonly used commands (Level 1).
- #
- case "${prev}" in
- -E)
- local running=$(for x in `cmake -E |& grep "^ " | cut -d" " -f 3`; do echo ${x} ; done )
- COMPREPLY=( $(compgen -W "${running}" -- ${cur}) )
- return 0
- ;;
- # FIXME: don't know how to handle multi words completion
- # or more precisely word that contains space in them like "Unix Makefiles"
- # -G)
- # local running=$(for x in `cmake --help | grep "^ .*=\ .*" | grep -v "^ -" | cut -d"=" -f 1 | grep -v "^ "`; do echo \"${x}\" ; done )
- # COMPREPLY=( $(compgen -W "${running}" -- ${cur}) )
- # return 0
- # ;;
- --help-command)
- local running=$(for x in `cmake --help-command-list | grep -v "cmake version"`; do echo ${x} ; done )
- COMPREPLY=( $(compgen -W "${running}" -- ${cur}) )
- return 0
- ;;
- --help-module)
- local running=$(for x in `cmake --help-module-list | grep -v "cmake version"`; do echo ${x} ; done )
- COMPREPLY=( $(compgen -W "${running}" -- ${cur}) )
- return 0
- ;;
- --help-policy)
- local running=$(for x in `cmake --help-policies | grep "^ CMP"`; do echo ${x} ; done )
- COMPREPLY=( $(compgen -W "${running}" -- ${cur}) )
- return 0
- ;;
- --help-property)
- local running=$(for x in `cmake --help-property-list | grep -v "cmake version"`; do echo ${x} ; done )
- COMPREPLY=( $(compgen -W "${running}" -- ${cur}) )
- return 0
- ;;
- --help-variable)
- local running=$(for x in `cmake --help-variable-list | grep -v "cmake version"`; do echo ${x} ; done )
- COMPREPLY=( $(compgen -W "${running}" -- ${cur}) )
- return 0
- ;;
- *)
- ;;
- esac
-
- #
- # Complete the arguments to some of
- # the most commonly used commands (Level 2).
- # ?? How to do that ..
-
- #
- # Complete the option (Level 0 - right after cmake)
- #
- COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-} &&
-complete -F _cmake -o default cmake
-
-#
-# cpack command
-#
-#have cpack &&
-_cpack()
-{
- local cur prev opts words cword
- COMPREPLY=()
- cur="${COMP_WORDS[COMP_CWORD]}"
- prev="${COMP_WORDS[COMP_CWORD-1]}"
- # seems to be only available on bash-completion 1.2
- #_get_comp_words_by_ref cur prev
-
- # cpack command line option we want to complete
- opts=`cpack --help | grep "^ \-.*=\ .*" | cut -d" " -f 3 | cut -d= -f 1`
- opts="${opts} --help -V"
-
- #
- # Complete the arguments to some of
- # the most commonly used commands (Level 1).
- #
- case "${prev}" in
- -G)
- local running=$(for x in `cpack --help | grep "^ .*=\ .*" | grep -v "^ -" | cut -d" " -f 3`; do echo ${x} ; done )
- COMPREPLY=( $(compgen -W "${running}" -- ${cur}) )
- return 0
- ;;
- --config)
- COMPREPLY=( $(compgen -f ${cur}) )
- return 0
- ;;
- --help-variable)
- local running=$(for x in `cpack --help-variable-list | grep -v "cpack version" `; do echo ${x} ; done )
- COMPREPLY=( $(compgen -W "${running}" -- ${cur}) )
- return 0
- ;;
- --help-command)
- local running=$(for x in `cpack --help-command-list | grep -v "cpack version" `; do echo ${x} ; done )
- COMPREPLY=( $(compgen -W "${running}" -- ${cur}) )
- return 0
- ;;
- *)
- ;;
- esac
-
- #
- # Complete the option (Level 0 - right after cpack)
- #
- COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-} &&
-complete -F _cpack -o default cpack
-
-#
-# ctest command
-#
-# have ctest &&
-_ctest()
-{
- local cur prev opts words cword
- COMPREPLY=()
- cur="${COMP_WORDS[COMP_CWORD]}"
- prev="${COMP_WORDS[COMP_CWORD-1]}"
- # seems to be only available on bash-completion 1.2
- #_get_comp_words_by_ref cur prev
-
- # cmake command line option we want to complete
- opts=`ctest --help | grep "\-\-.*" | cut -d" " -f 3 | sed s/,/\\\n/g`
-
- #
- # Complete the arguments to some of
- # the most commonly used commands (Level 1).
- #
- case "${prev}" in
- --help-command)
- local running=$(for x in `ctest --help-command-list | grep -v "ctest version" `; do echo ${x} ; done )
- COMPREPLY=( $(compgen -W "${running}" -- ${cur}) )
- return 0
- ;;
- -R|-E)
- local running=$(for x in `ctest -N 2> /dev/null | grep "^ Test" | cut -d: -f 2`; do echo ${x} ; done )
- COMPREPLY=( $(compgen -W "${running}" -- ${cur}) )
- return 0
- ;;
- *)
- ;;
- esac
-
- #
- # Complete the arguments to some of
- # the most commonly used commands (Level 2).
- # ?? How to do that ..
-
- #
- # Complete the option (Level 0 - right after cmake)
- #
- COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-} &&
-complete -F _ctest -o default ctest
-
-# Local variables:
-# mode: shell-script
-# sh-basic-offset: 4
-# sh-indent-comment: t
-# indent-tabs-mode: nil
-# End:
-# ex: ts=4 sw=4 et filetype=sh