commit
c9ace578af
|
@ -0,0 +1,274 @@
|
|||
#compdef cmake
|
||||
|
||||
# Description
|
||||
# -----------
|
||||
#
|
||||
# Completion script for CMake (http://www.cmake.org).
|
||||
#
|
||||
# -------------------------------------------------------------------------
|
||||
# Authors
|
||||
# -------
|
||||
#
|
||||
# * Scott M. Kroll <skroll@gmail.com>
|
||||
#
|
||||
# -------------------------------------------------------------------------
|
||||
# Notes
|
||||
# -----
|
||||
#
|
||||
# * By default only C and C++ languages are supported for compiler flag
|
||||
# variables. To define your own list of languages:
|
||||
#
|
||||
# cmake_langs=('C' 'C'
|
||||
# 'CXX' 'C++')
|
||||
# zstyle ':completion:*:cmake:*' languages $cmake_langs
|
||||
#
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
_cmake() {
|
||||
local context state line curcontext="$curcontext" cmake_args
|
||||
|
||||
local cmake_help_actions;cmake_help_actions=(
|
||||
'(- 1)--help-command[Print help for a single command and exit]:command-name:_cmake_command_names'
|
||||
'(- 1)--help-command-list[List available listfile commands and exit]'
|
||||
'(- 1)--help-commands[Print help for all commands and exit]'
|
||||
'(- 1)--help-compatcommands[Print help for compatibility commands]'
|
||||
'(- 1)--help-module[Print help for compatibility commands]:module-name:_cmake_module_names'
|
||||
'(- 1)--help-module-list[Print help for a single module and exit]'
|
||||
'(- 1)--help-modules[Print help for all modules and exit]'
|
||||
'(- 1)--help-property[List available properties and exit]:property-name:_cmake_property_names'
|
||||
'(- 1)--help-property-list[List available properties and exit]'
|
||||
'(- 1)--help-properties[Print help for all properties and exit]'
|
||||
'(- 1)--help-variable[Print help for a single variable and exit]:variable-name:_cmake_variable_names'
|
||||
'(- 1)--help-variable-list[List documented variables and exit]'
|
||||
'(- 1)--help-variables[Print help for all variables and exit]'
|
||||
'(- 1)--copyright[Print the CMake copyright and exit]'
|
||||
'(- 1)'{--help,-help,-usage,-h,-H}'[Print usage information and exit]'
|
||||
'(- 1)--help-full[Print full help and exit]'
|
||||
'(- 1)--help-html[Print full help in HTML format]'
|
||||
'(- 1)--help-man[Print full help as a UNIX man page and exit]'
|
||||
'(- 1)'{--version,-version}'[Print full help as a UNIX man page and exit]'
|
||||
)
|
||||
|
||||
local cmake_build_options;cmake_build_options=(
|
||||
'-C[Pre-load a script to populate the cache]:script:_files'
|
||||
'*-D-[Create a cmake cache entry]:property:_cmake_define_property'
|
||||
'-U[Remove matching entries from CMake cache]:globbing expression'
|
||||
'-G[Specify a makefile generator]:generator:_cmake_generators'
|
||||
'-T[Specify toolset name if supported by generator]:toolset name'
|
||||
'(-Wno-dev -Wdev)-Wno-dev[Suppress developer warnings]'
|
||||
'(-Wno-dev -Wdev)-Wdev[Enable developer warnings]'
|
||||
'-i[Run in wizard mode]'
|
||||
'-L-[List cache variables]::_values "options" "[non-advanced cache variables]" "A[advanced cache variables]" "H[non-advanced cached variables with help]" "AH[advanced cache variables with help]"'
|
||||
'--trace[Put cmake in trace mode]'
|
||||
':cmake project:_files -/'
|
||||
)
|
||||
|
||||
local cmake_command_actions;cmake_command_actions=(
|
||||
'-E[CMake command mode]:*:command'
|
||||
)
|
||||
|
||||
_arguments -C -s \
|
||||
- help \
|
||||
"$cmake_help_actions[@]" \
|
||||
- command \
|
||||
"$cmake_command_actions[@]" \
|
||||
- build_opts \
|
||||
"$cmake_build_options[@]" && return 0
|
||||
}
|
||||
|
||||
# -------------------
|
||||
# _cmake_command_names
|
||||
# -------------------
|
||||
(( $+functions[_cmake_command_names] )) ||
|
||||
_cmake_command_names() {
|
||||
local command_names; command_names=(${(f)"$($service --help-command-list 2> /dev/null)"})
|
||||
_values 'command name' ${command_names[@]:1} && return 0
|
||||
}
|
||||
|
||||
# -----------------
|
||||
# _cmake_list_names
|
||||
# -----------------
|
||||
(( $+functions[_cmake_list_names] )) ||
|
||||
_cmake_list_names() {
|
||||
local command; command="$@[1]"
|
||||
local desc; desc="$@[2]"
|
||||
local list_names; list_names=(${(f)"$($service $command 2> /dev/null | sed -e 's/\[/\\\[/' -e 's/\]/\\\]/')"})
|
||||
|
||||
_values ${desc} ${list_names[@]:1} && return 0
|
||||
}
|
||||
|
||||
# ------------------
|
||||
# _cmake_module_names
|
||||
# ------------------
|
||||
(( $+functions[_cmake_module_names] )) ||
|
||||
_cmake_module_names() {
|
||||
_cmake_list_names '--help-module-list' 'module name' && return 0
|
||||
}
|
||||
|
||||
# --------------------
|
||||
# _cmake_property_names
|
||||
# --------------------
|
||||
(( $+functions[_cmake_property_names] )) ||
|
||||
_cmake_property_names() {
|
||||
_cmake_list_names '--help-property-list' 'property name' && return 0
|
||||
}
|
||||
|
||||
# ---------------------
|
||||
# _cmake_variable_names
|
||||
# ---------------------
|
||||
(( $+functions[_cmake_variable_names] )) ||
|
||||
_cmake_variable_names() {
|
||||
_cmake_list_names '--help-variable-list' 'variable name' && return 0
|
||||
}
|
||||
|
||||
# ----------------------
|
||||
# _cmake_define_property
|
||||
# ----------------------
|
||||
(( $+functions[_cmake_define_property] )) ||
|
||||
_cmake_define_property() {
|
||||
if compset -P '*='; then
|
||||
_wanted property-values expl 'property value' _cmake_define_property_values ${${IPREFIX%=}#-D} && return 0
|
||||
else
|
||||
_wanted property-names expl 'property name' _cmake_define_property_names -qS= && return 0
|
||||
fi
|
||||
}
|
||||
|
||||
# ----------------------------
|
||||
# _cmake_define_property_names
|
||||
# ----------------------------
|
||||
(( $+functions[_cmake_define_property_names] )) ||
|
||||
_cmake_define_property_names() {
|
||||
local alternatives; alternatives=(
|
||||
'common-property-names:common property name:_cmake_define_common_property_names -qS='
|
||||
)
|
||||
local -A cmake_langs
|
||||
zstyle -a ":completion:${curcontext}:" languages cmake_langs
|
||||
[[ $#cmake_langs -eq 0 ]] && cmake_langs=('C' 'C' 'CXX' 'C++')
|
||||
|
||||
for cmake_lang in ${(k)cmake_langs}; do
|
||||
cmake_lang_desc="${cmake_langs[$cmake_lang]}"
|
||||
alternatives+=("${cmake_lang//:/-}-property-names:${cmake_lang_desc} language property name:_cmake_define_lang_property_names -qS= ${cmake_lang} ${cmake_lang_desc}")
|
||||
done
|
||||
|
||||
_alternative "${alternatives[@]}"
|
||||
}
|
||||
|
||||
# ---------------------------------
|
||||
# _cmake_define_lang_property_names
|
||||
# ---------------------------------
|
||||
(( $+functions[_cmake_define_lang_property_names] )) ||
|
||||
_cmake_define_lang_property_names() {
|
||||
local cmake_lang="$@[-2]" cmake_lang_desc="$@[-1]"
|
||||
local properties; properties=(
|
||||
"CMAKE_${cmake_lang}_COMPILER:${cmake_lang_desc} compiler"
|
||||
"CMAKE_${cmake_lang}_FLAGS:${cmake_lang_desc} compiler flags for all builds"
|
||||
"CMAKE_${cmake_lang}_FLAGS_DEBUG:${cmake_lang_desc} compiler flags for all Debug build"
|
||||
"CMAKE_${cmake_lang}_FLAGS_RLEASE:${cmake_lang_desc} compiler flags for all Relase build"
|
||||
"CMAKE_${cmake_lang}_FLAGS_MINSIZREL:${cmake_lang_desc} compiler flags for all MinSizRel build"
|
||||
"CMAKE_${cmake_lang}_FLAGS_RELWITHDEBINFO:${cmake_lang_desc} compiler flags for all RelWithDebInfo build"
|
||||
)
|
||||
|
||||
_describe -t "${cmake_lang//:/-}-property-names" "${cmake_lang_desc} property name" properties $@[0,-3] && return 0
|
||||
}
|
||||
|
||||
# -----------------------------------
|
||||
# _cmake_define_common_property_names
|
||||
# -----------------------------------
|
||||
(( $+functions[_cmake_define_common_property_names] )) ||
|
||||
_cmake_define_common_property_names() {
|
||||
local properties; properties=(
|
||||
'CMAKE_BUILD_TYPE:Specifies the build type for make based generators'
|
||||
'CMAKE_TOOLCHAIN_FILE:Absolute or relative path to a cmake script which sets up toolchain related variables'
|
||||
'CMAKE_COLOR_MAKEFILE:Enables/disables color output when using the Makefile generator'
|
||||
'CMAKE_INSTALL_PREFIX:Install directory used by install'
|
||||
)
|
||||
|
||||
_describe -t 'common-property-names' 'common property name' properties $@
|
||||
}
|
||||
|
||||
# ----------------------------
|
||||
# _cmake_define_property_values
|
||||
# ----------------------------
|
||||
(( $+functions[_cmake_define_property_values] )) ||
|
||||
_cmake_define_property_values() {
|
||||
local ret=1
|
||||
setopt localoptions extendedglob
|
||||
case $@[-1] in
|
||||
(CMAKE_BUILD_TYPE) _wanted build-types expl 'build type' _cmake_build_types && ret=0;;
|
||||
(CMAKE_TOOLCHAIN_FILE) _wanted toolchain-files expl 'file' _cmake_toolchain_files && ret=0;;
|
||||
(CMAKE_COLOR_MAKEFILE) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;;
|
||||
(CMAKE_INSTALL_PREFIX) _files -/ && ret=0;;
|
||||
(CMAKE_*_COMPILER) _wanted compilers expl 'compiler' _cmake_compilers && ret=0;;
|
||||
(CMAKE_*_FLAGS(|_?*)) _message -e compiler-flags 'compiler flags' && ret=0;;
|
||||
(*) _files && ret=0;;
|
||||
esac
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
# ------------------
|
||||
# _cmake_build_types
|
||||
# ------------------
|
||||
(( $+functions[_cmake_build_types] )) ||
|
||||
_cmake_build_types() {
|
||||
local build_types; build_types=(
|
||||
'Debug'
|
||||
'Release'
|
||||
'RelWithDebInfo'
|
||||
'MinSizeRel'
|
||||
)
|
||||
_values 'build type' ${build_types[@]}
|
||||
}
|
||||
|
||||
# -----------------
|
||||
# _cmake_generators
|
||||
# -----------------
|
||||
(( $+functions[_cmake_generators] )) ||
|
||||
_cmake_generators() {
|
||||
local generators; generators=(
|
||||
'Unix Makefiles'
|
||||
'Ninja'
|
||||
'CodeBlocks - Ninja'
|
||||
'CodeBlocks - Unix Makefiles'
|
||||
'Eclipse CDT4 - Ninja'
|
||||
'Eclipse CDT4 - Unix Makefiles'
|
||||
'KDevelop3'
|
||||
'KDevelop3 - Unix Makefiles'
|
||||
'Sublime Text 2 - Ninja'
|
||||
'Sublime Text 2 - Unix Makefiles'
|
||||
)
|
||||
|
||||
_describe -t generators 'generator' generators
|
||||
}
|
||||
|
||||
# ----------------------
|
||||
# _cmake_toolchain_files
|
||||
# ----------------------
|
||||
(( $+functions[_cmake_toolchain_files] )) ||
|
||||
_cmake_toolchain_files() {
|
||||
_files -g '*\.cmake*'
|
||||
}
|
||||
|
||||
# ---------------
|
||||
# _cmake_booleans
|
||||
# ---------------
|
||||
(( $+functions[_cmake_booleans] )) ||
|
||||
_cmake_booleans() {
|
||||
local booleans; booleans=(
|
||||
'YES'
|
||||
'NO'
|
||||
)
|
||||
_describe -t booleans 'boolean' booleans
|
||||
}
|
||||
|
||||
# ---------------
|
||||
# _cmake_compilers
|
||||
# ---------------
|
||||
(( $+functions[_cmake_compilers] )) ||
|
||||
_cmake_compilers() {
|
||||
_command_names -e
|
||||
}
|
||||
|
||||
|
||||
_cmake "$@"
|
||||
|
Loading…
Reference in New Issue