mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-06-17 09:08:04 +02:00
110 lines
4.6 KiB
Text
110 lines
4.6 KiB
Text
#compdef strip
|
|
|
|
local curcontext=$curcontext state line variant ret=1
|
|
declare -A opt_args
|
|
declare -a args
|
|
|
|
if _pick_variant -r variant gnu=GNU elftoolchain=elftoolchain $OSTYPE --version; then
|
|
case $variant in
|
|
gnu|elftoolchain)
|
|
args=(
|
|
'(-g -S -d --strip-debug)'{-g,-S,-d,--strip-debug}'[remove debugging symbols]'
|
|
'(-I --input-target)'{-I+,--input-target=}'[object code format of input]:bfd name:->bfdnames'
|
|
'*'{-K+,--keep-symbol=}'[keep given symbol]:symbol name'
|
|
'*'{-N+,--strip-symbol=}'[strip given symbol]:symbol name'
|
|
'(-O --output-target)'{-O+,--output-target=}'[object code format of output]:bfd name:->bfdnames'
|
|
'(-p --preserve-dates)'{-p,--preserve-dates}'[preserve access and modification dates]'
|
|
'*'{-R+,--remove-section=}'[remove given sections]:section name'
|
|
'(-s --strip-all)'{-s,--strip-all}'[remove all symbols]'
|
|
'(-w --wildcard)'{-w,--wildcard}'[permit wildcards in symbol names]'
|
|
'(-X --discard-locals)'{-X,--discard-locals}'[remove compiler-generated local symbols]'
|
|
'(-x --discard-all)'{-x,--discard-all}'[remove non-global symbols]'
|
|
'--only-keep-debug[remove everything except debugging information]'
|
|
'--strip-unneeded[remove symbols not needed for relocation processing]'
|
|
'(- 1 *)'{-V,--version}'[display version information and exit]'
|
|
)
|
|
;|
|
|
gnu)
|
|
if [[ -prefix @* ]]; then
|
|
compset -P '@'
|
|
|
|
local expl
|
|
|
|
_description files expl 'command-line-options file'
|
|
_files "$expl[@]"
|
|
return
|
|
fi
|
|
args+=(
|
|
'(-F --target)'{-F+,--target=}'[object code format to use]:bfd name:->bfdnames'
|
|
'(-)--help[display usage information]'
|
|
'(-)--info[display list of architectures and object formats]'
|
|
'(-D --enable-deterministic-archives -U --disable-deterministic-archives)'{-U,--disable-deterministic-archives}'[disable -D behavior]'
|
|
'(-D --enable-deterministic-archives -U --disable-deterministic-archives)'{-D,--enable-deterministic-archives}'[produce deterministic output when stripping archives (zero file metadata)]'
|
|
'--remove-relocations=[remove relocations from specified section]:section'
|
|
'--strip-dwo[remove all DWARF .dwo sections]'
|
|
'!(--no-merge-notes)'{-M,--merge-notes}
|
|
"--no-merge-notes[don't attempt to remove redundant notes]"
|
|
"*--keep-section=[don't strip given section]:section"
|
|
'(*)-o+[output file]:output file:_files'
|
|
'--keep-section-symbols[retain section symbols]'
|
|
'--keep-file-symbols[retain symbols specifying source file names]'
|
|
'(-v --verbose)'{-v,--verbose}'[list all object files modified or members of archives]')
|
|
;;
|
|
elftoolchain)
|
|
args+=(
|
|
'(- 1 *)'{-h,--help}'[display usage information]'
|
|
'(*)'{-o+,--output-file=}'[specify output file]:output file:_files'
|
|
)
|
|
;;
|
|
solaris*)
|
|
args=(
|
|
'-l[strip line information only]'
|
|
'-V[display version information on stderr and exit]'
|
|
'-x[do not strip the symbol table]'
|
|
)
|
|
;;
|
|
darwin*)
|
|
local -a arch
|
|
arch=( ${(z)${${"$(_call_program architectures
|
|
strings -arch - 2>&1)"}#*flags are: }%%$'\n'*} all )
|
|
args=(
|
|
'-u[save all undefined symbols]'
|
|
'-r[save all symbols referenced dynamically]'
|
|
'-s[save global symbols listed in the specified file]:file:_files'
|
|
'-R[remove global symbols listed in the specified file]:file:_files'
|
|
'-i[ignore symbols listed in -s/-R file but are not in the object files]'
|
|
'-d[save debug symbols in files listed in the specified file]:file:_file'
|
|
'-A[save all global absolute symbols and Objective-C class symbols]'
|
|
'-n[save all N_SECT global symbols]'
|
|
'-S[remove debug symbols]'
|
|
'-X[remove local symbols whose names begin with L]'
|
|
'-T[remove Swift symbols]'
|
|
'-N[remove all nlist symbols and string tables from binaries used by dyld]'
|
|
'-x[remove all local symbols]'
|
|
'-c[remove section contents of dynamic library to create stub library]'
|
|
'-o[write the result to specified file]:output file:_files'
|
|
'-no_uuid[remove only LC_UUID load command]'
|
|
'-no_split_info[remove LC_SEGMENT_SPLIT_INFO load command]'
|
|
'-no_code_signature_warning[not warn when code signature would be invalid in the output]'
|
|
'-arch[specify the architecture]:architecture:( $arch )'
|
|
)
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
_arguments -C \
|
|
$args \
|
|
'1:executable:_files -g "*(-*)"' \
|
|
'*::executable:_files -g "*(-*)"' && ret=0
|
|
|
|
case $state in
|
|
(bfdnames)
|
|
local expl
|
|
declare -a bfdnames
|
|
|
|
bfdnames=(${=${(M)${(f)"$(_call_program bfdnames strip --help)"}:#strip: supported targets: *}#strip: supported targets: })
|
|
_describe -t bfdnames 'bfd name' bfdnames && ret=0
|
|
;;
|
|
esac
|
|
|
|
return ret
|