commit
						94ad3f32ba
					
				|  | @ -0,0 +1,325 @@ | |||
| #compdef ccache -P -value-,CCACHE_*,-default- | ||||
| 
 | ||||
| # zsh completion script for ccache | ||||
| 
 | ||||
| # Copyright 2018 CERN for the benefit of the LHCb Collaboration. | ||||
| 
 | ||||
| # Redistribution and use in source and binary forms, with or without | ||||
| # modification, are permitted provided that the following conditions are met: | ||||
| #  | ||||
| # * Redistributions of source code must retain the above copyright notice, this | ||||
| #   list of conditions and the following disclaimer. | ||||
| #  | ||||
| # * Redistributions in binary form must reproduce the above copyright notice, | ||||
| #   this list of conditions and the following disclaimer in the documentation | ||||
| #   and/or other materials provided with the distribution. | ||||
| #  | ||||
| # * Neither the name of the copyright holder nor the names of its | ||||
| #   contributors may be used to endorse or promote products derived from | ||||
| #   this software without specific prior written permission. | ||||
| #  | ||||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||
| # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
| # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||||
| # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
| # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||||
| # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||||
| # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||||
| # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| # | ||||
| # In applying this licence, CERN does not waive the privileges and immunities | ||||
| # granted to it by virtue of its status as an Intergovernmental Organization | ||||
| # or submit itself to any jurisdiction. | ||||
| 
 | ||||
| # allow users to define their better compilers | ||||
| # inspired by _cmake_compilers | ||||
| # users could override with | ||||
| # | ||||
| # _ccache_compilers() { | ||||
| #   local -a _ccache_compilers | ||||
| #   _ccache_compilers=(gcc g++ clang clang++) | ||||
| #   _wanted compilers expl "compiler" compadd -- $_ccache_compilers | ||||
| # } | ||||
| (( $+functions[_ccache_compilers] )) || | ||||
| _ccache_compilers() { | ||||
|   _command_names -e | ||||
| } | ||||
| 
 | ||||
| _ccache_booleans() { | ||||
|   _message 'There are no "false" values, unset variable to disable' | ||||
|   local description; description=${1:-boolean} | ||||
|   local booleans; booleans=( | ||||
|   'true' | ||||
|   'yes' | ||||
|   ) | ||||
|   _describe -t booeans "$description" booleans | ||||
| } | ||||
| 
 | ||||
| (( $+functions[_ccache_compressionlevels] )) || | ||||
| _ccache_compressionlevels() { | ||||
|   local -a one_nine | ||||
|   one_nine=(1 2 3 4 5 6 7 8 9) | ||||
|   _describe -t onetonine "compression level (if using compression)" one_nine | ||||
| } | ||||
| 
 | ||||
| (( $+functions[_ccache_sloppiness] )) || | ||||
| _ccache_sloppiness() { | ||||
|   _values -s ',' \ | ||||
|     "file_macro[ignore __FILE__]" \ | ||||
|     "file_stat_matches[rely on mtimes and ctimes]" \ | ||||
|     "include_file_ctime[ignore headers' ctime too new]" \ | ||||
|     "include_file_mtime[ignore headers' mtime too new]" \ | ||||
|     "no_system_headers[exclude system headers from cache]" \ | ||||
|     "pch_defines[be sloppy about #defines in pch]" \ | ||||
|     "time_macros[ignore __date__ and __time__]" | ||||
| } | ||||
| 
 | ||||
| (( $+functions[_ccache_compilerchecks] )) || | ||||
| _ccache_compilerchecks() { | ||||
|   local -a compiler_check_values | ||||
|   compiler_check_values=( | ||||
|   'content: the actual compiler binary' | ||||
|   'mtime: mtime and size of the compiler' | ||||
|   'none: ignore compiler for hashing' | ||||
|   'string\:: any hard coded string (pre-computed version)' | ||||
|   '%compiler%\ -v:any compiler invocation output' | ||||
|   ) | ||||
|   _describe -t compilerchecks "compiler information included in the hash" compiler_check_values | ||||
| } | ||||
| 
 | ||||
| (( $+functions[_ccache_dirlevels] )) || | ||||
| _ccache_dirlevels() { | ||||
|   local -a one_eight | ||||
|   one_eight=(1 2 3 4 5 6 7 8) | ||||
|   _describe -t onetoeight "directory levels in the cache directory" one_eight | ||||
| } | ||||
| 
 | ||||
| if [[ "$service" = -value-* ]]; then | ||||
|   case $service in | ||||
|     *CCACHE_*DIR*) | ||||
|       # CCACHE_BASEDIR: relative to which top level paths are hashed | ||||
|       # CCACHE_DIR: where the cache and config are kept | ||||
|       # CCACHE_TEMPDIR: where temporary files are kept | ||||
|       # all: a single path | ||||
|       _path_files -/ | ||||
|       ;; | ||||
|     *CCACHE_NLEVELS*) | ||||
|       _ccache_dirlevels | ||||
|       ;; | ||||
|     *CCACHE_CC*) | ||||
|       _ccache_compilers | ||||
|       ;; | ||||
|     *CCACHE_COMPILERCHECK*) | ||||
|       _ccache_compilerchecks | ||||
|       ;; | ||||
|     *CCACHE_*COMPRESS*) | ||||
|       _ccache_booleans "write compressed cache" | ||||
|       ;; | ||||
|     *CCACHE_COMPRESSLEVEL*) | ||||
|       _ccache_compressionlevels | ||||
|       ;; | ||||
|     *CCACHE_EXTENSION*) | ||||
|       _alternative ':set extension for intermediate files: ' | ||||
|       ;; | ||||
|     *CCACHE_*DIRECT*) | ||||
|       _ccache_booleans "use direct mode" | ||||
|       ;; | ||||
|     *CCACHE_*DISABLE*) | ||||
|       _ccache_booleans "disable cache usage" | ||||
|       ;; | ||||
|     *CCACHE_EXTRAFILES*) | ||||
|       local sep=: | ||||
|       compset -P "*${sep}" | ||||
|       compset -S "${sep}*" || suf="$sep" | ||||
| 
 | ||||
|       _files "" -r "${sep}"' /\t\t\-' "$@" | ||||
|       ;; | ||||
|     *CCACHE_*HARDLINK*) | ||||
|       _ccache_booleans "create hard links rather than copies" | ||||
|       ;; | ||||
|     *CCACHE_*HASHDIR*) | ||||
|       _ccache_booleans "include the cwd in the hash" | ||||
|       ;; | ||||
|     *CCACHE_IGNOREHEADERS*) | ||||
|       _dir_list | ||||
|       ;; | ||||
|     *CCACHE_*COMMENTS*) | ||||
|       _ccache_booleans "consider comments in hashing" | ||||
|       ;; | ||||
|     *CCACHE_LIMIT_MULTIPLE*) | ||||
|       _alternative ":clean up down to level (e.g. 0.8): " | ||||
|       ;; | ||||
|     *CCACHE_LOGFILE*) | ||||
|       _path_files -g "*(/) *.log" | ||||
|       ;; | ||||
|     *CCACHE_MAXFILES*) | ||||
|       _alternative ":maximum number of files in the cache (0= no limit): " | ||||
|       ;; | ||||
|     *CCACHE_MAXSIZE*) | ||||
|       _alternative ':maximum cache size (0= no limit) with suffix k,M,G,T or Ki,Mi,Gi,Ti: ' | ||||
|       ;; | ||||
|     *CCACHE_PATH*) | ||||
|       _alternative ':PATH for compiler lookup (instead of $PATH):_dir_list' | ||||
|       ;; | ||||
|     *CCACHE_PREFIX*) | ||||
|       _alternative ':prefixes for compiler invokation: ' | ||||
|       ;; | ||||
|     *CCACHE_PREFIX_CPP*) | ||||
|       _alternative ':prefixes for preprocessor invokation: ' | ||||
|       ;; | ||||
|     *CCACHE_*READONLY*) | ||||
|       _ccache_booleans "treat cache as read-only" | ||||
|       ;; | ||||
|     *CCACHE_*READONLY_DIRECT*) | ||||
|       _ccache_booleans "retrieve from read-only cache in direct mode" | ||||
|       ;; | ||||
|     *CCACHE_*RECACHE*) | ||||
|       _ccache_booleans "use cache in write-only mode" | ||||
|       ;; | ||||
|     *CCACHE_*CPP2*) | ||||
|       _ccache_booleans "pass originial rather than preprocessed source code to compiler" | ||||
|       ;; | ||||
|     *CCACHE_SLOPPINESS*) | ||||
|       _ccache_sloppiness | ||||
|       ;; | ||||
|     *CCACHE_*STATS*) | ||||
|       _ccache_booleans "update statistics counters" | ||||
|       ;; | ||||
|     *CCACHE_UMASK*) | ||||
|       _alternative ":umask value (octal): " | ||||
|       ;; | ||||
|     *CCACHE_*UNIFY*) | ||||
|       _ccache_booleans "normalise sources prior to processing" | ||||
|       ;; | ||||
|   esac | ||||
| 
 | ||||
|   return | ||||
| fi | ||||
| 
 | ||||
| __ccache_config_keys() { | ||||
|   local -a keys | ||||
|   keys=( | ||||
|   'compression:write compressed cache' | ||||
|   'direct_mode:use direct mode' | ||||
|   'disable:disable cache usage' | ||||
|   'hard_link:create hard links rather than copies' | ||||
|   'hash_dir:include the cwd in the hash' | ||||
|   'keep_comments_cpp:consider comments in hashing' | ||||
|   'read_only:treat cache as read-only' | ||||
|   'read_only_direct:retrieve from read-only cache in direct mode' | ||||
|   'recache:use cache in write-only mode' | ||||
|   'run_second_cpp:pass originial rather than preprocessed source code to compiler' | ||||
|   'stats:update statistics counters' | ||||
|   'unify:normalise sources prior to processing' | ||||
|   'base_dir:specify relative to which top level paths are hashed' | ||||
|   'temporary_dir:specify where temporary files are kept' | ||||
|   'cache_dir:specify where the cache is kept' | ||||
|   'compiler:specify compiler' | ||||
|   'cache_dir_levels:directory levels in the cache directory' | ||||
|   'compiler_check:compiler information included in the hash' | ||||
|   'compression_level:cache compression level' | ||||
|   'cpp_extension:set extensions for intermediate files' | ||||
|   'extra_files_to_hash:additional files to consider in hashing' | ||||
|   'ignore_headers_in_manifest:set paths to headers to ignore in hashing' | ||||
|   'limit_multiple:cleanup level' | ||||
|   'log_file:specify a log file' | ||||
|   'max_files:maximum number of files in the cache' | ||||
|   'max_size:maximum size of the cache' | ||||
|   'path:PATH for compiler lookup (instead of $PATH)' | ||||
|   'prefix_command:prefixes for compiler invokation' | ||||
|   'prefix_command_cpp:prefixes for preprocessor invokation' | ||||
|   'sloppiness:hash files sloppy' | ||||
|   'umask:set umask for ccache and child processes (e.g. for sharing cache)' | ||||
|   ) | ||||
|   _describe -t configkeys "configuration keys" keys -S '=' | ||||
| } | ||||
| 
 | ||||
| if compset -P '--set-config=*='; then | ||||
|   case $IPREFIX in | ||||
|     *=compression= | *=direct_mode= | *=disable= | *=hard_link= | *=hash_dir= | *=keep_comments_cpp= | *=read_only= | *=read_only_direct= | *=recache= | *=run_second_cpp= | *=stats= | *=unify= ) | ||||
|       local booleans; booleans=( | ||||
|       'true' | ||||
|       'false' | ||||
|       ) | ||||
|       _describe -t booleans 'boolean' booleans | ||||
|       ;; | ||||
|     *=base_dir= | *=temporary_dir= | *=cache_dir=) | ||||
|       _path_files -/ | ||||
|       ;; | ||||
|     *=compiler=) | ||||
|       _ccache_compilers | ||||
|       ;; | ||||
|     *=cache_dir_levels=) | ||||
|       _ccache_dirlevels | ||||
|       ;; | ||||
|     *=compiler_check=) | ||||
|       _ccache_compilerchecks | ||||
|       ;; | ||||
|     *=compression_level=) | ||||
|       _ccache_compressionlevels | ||||
|       ;; | ||||
|     *=cpp_extension=) | ||||
|       _alternative ':set extension for intermediate files: ' | ||||
|       ;; | ||||
|     *=extra_files_to_hash=) | ||||
|       local sep=: | ||||
|       compset -P "*${sep}" | ||||
|       compset -S "${sep}*" || suf="$sep" | ||||
| 
 | ||||
|       _files "" -r "${sep}"' /\t\t\-' "$@" | ||||
|       ;; | ||||
|     *=ignore_headers_in_manifest=) | ||||
|       _dir_list | ||||
|       ;; | ||||
|     *=limit_multiple=) | ||||
|       _alternative ":clean up down to level (e.g. 0.8): " | ||||
|       ;; | ||||
|     *=log_file=) | ||||
|       _path_files -g "*(/) *.log" | ||||
|       ;; | ||||
|     *=max_files=) | ||||
|       _alternative ":maximum number of files in the cache (0= no limit): " | ||||
|       ;; | ||||
|     *=max_size=) | ||||
|       _alternative ':maximum cache size (0= no limit) with suffix k,M,G,T or Ki,Mi,Gi,Ti: ' | ||||
|       ;; | ||||
|     *=path=) | ||||
|       _alternative ':PATH for compiler lookup (instead of $PATH):_dir_list' | ||||
|       ;; | ||||
|     *=prefix_command=) | ||||
|       _alternative ':prefixes for compiler invokation: ' | ||||
|       ;; | ||||
|     *=prefix_command_cpp=) | ||||
|       _alternative ':prefixes for preprocessor invokation: ' | ||||
|       ;; | ||||
|     *=sloppiness=) | ||||
|       _ccache_sloppiness | ||||
|       ;; | ||||
|     *=umask=) | ||||
|       _alternative ":umask value (octal): " | ||||
|       ;; | ||||
|   esac | ||||
| elif [[ $words[2] == -* ]]; then | ||||
|   # if the first argument starts with -, we are in configure-ccache mode | ||||
|   _arguments \ | ||||
|     '*'{-o,--set-config=}"[set configuration key]:keys:__ccache_config_keys" \ | ||||
|     '(: -)'{-h,--help}'[show help message]' \ | ||||
|     '(: -)'{-V,--version}'[print version and copyright information]' \ | ||||
|     '(-z --zero-stats)'{-z,--zero-stats}'[zero statistics counters]' \ | ||||
|     '(-c --cleanup)'{-c,--cleanup}'[delete old files and recalculate size counters]' \ | ||||
|     '(-C --clear)'{-C,--clear}'[clear the cache completely (except configuration)]' \ | ||||
|     '(-p --print-config)'{-p,--print-config}'[print current configuration options]' \ | ||||
|     '(-s --show-stats)'{-s,--show-stats}'[show statistics summary]' \ | ||||
|     '(-F --max-files=)'{-F,--max-files=}'[set maximum number of files in cache]:number of files in cache: ' \ | ||||
|     '(-M --max-size=)'{-M,--max-size=}'[set maximum size of cache]:cache size: ' | ||||
| elif [[ $CURRENT -eq 2 ]]; then | ||||
|   _ccache_compilers | ||||
| else | ||||
|   # the command line already looks like 'ccache <compiler> ...' | ||||
|   # forward to the completion function of the compiler | ||||
|   (( CURRENT-- )) | ||||
|   shift words | ||||
|   _normal | ||||
| fi | ||||
		Loading…
	
		Reference in New Issue