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