#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